-1

我正在开发一个 Web 应用程序,其中用户拥有个人资料以及与该个人资料相关的技能。我想开发一个页面,用户可以在其中查看与特定技能对应的所有配置文件。例如,如果我想查看所有具有“HTML”技能的用户,我可以使用http://site.com/skills/HTML. 很简单。

我已经让它工作了,但是有些用户具有空格技能(例如project management),有些用户具有特殊字符(例如C#)。当我浏览到类似的 URLhttp://site.com/skills/C#时,Cake 会自动生成它,http://site.com/skills/C因为它会解析特殊字符(#在本例中)。

如何安全地允许 URL 中包含特殊字符的技能?这是我目前正在使用的操作:

public function view($name) {
    // Find skill using $name
    $skill = $this->Skill->find('first', array(
        'conditions' => array('Skill.name' => $name)
    ));

    if(!$skill) {
        // Skill doesn't exist, return 404
        // TODO: route to 404 page
        throw new NotFoundException();
    }

    $this->set('skill', $skill);
}
4

1 回答 1

2

#是一个“特殊”字符,默认情况下会跳转到一个命名的锚点。为了在 URL 中使用特殊字符,您需要使用urlencode()

但请注意,您的 URL 看起来并不“花哨”,它只会被编码为特殊字符的原始 HTML 实体。在你的情况下C#会变成C%23. 因此,您可能需要考虑为您的标签使用不同的 URL 别名,例如CSharp(您可以设置一个“背景”数据库字段以将原始值“翻译”为对 URL 友好的值)。

于 2013-03-26T12:27:33.890 回答