2013-03-26 63 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