CakePHP URL中的特殊字符

时间:2013-03-26 12:22:12

标签: php url cakephp special-characters

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

我已经开始工作,但有些用户具有空格技能(例如project management),有些用户具有特殊字符(例如C#)。当我浏览到http://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);
}

1 个答案:

答案 0 :(得分:2)

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

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