2013-03-26 51 views
-1

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

我有它的工作,但有些用户有空间技能(例如project management)和一些有特殊字符(例如C#)。当我浏览到像http://site.com/skills/C#这样的URL时,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); 
} 

回答

2

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

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

+0

完美漂亮的URL并不是必需的,我只是想知道Cake是否有一种特殊的方式来处理它而不是'urlencode()'。我已经改变了它,它工作正常,谢谢你:) – user1788996 2013-03-26 12:49:03