-1

私は、ユーザーがプロファイルとそのプロファイルに関連するスキルを持っているWebアプリケーションを開発しています。特定のスキルに対応するすべてのプロファイルをユーザーが表示できるページを開発したいと思います。たとえば、「HTML」のスキルを持つすべてのユーザーを表示したい場合は、を使用できますhttp://site.com/skills/HTML。ものすごく単純。

私はそれを機能させましたが、一部のユーザーはスペースのスキルを持っていて(たとえばproject management)、一部のユーザーは特殊文字を持っています(たとえばC#)。のようなURLを参照すると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);
}
4

1 に答える 1

2

これ#は「特殊」文字であり、デフォルトで名前付きアンカーにジャンプします。URLで特殊文字を使用するには、 urlencode()を使用する必要があります。

ただし、URLは「派手」に見えず、特殊文字の生のHTMLエンティティにエンコードされるだけであることに注意してください。あなたの場合C#はになりC%23ます。したがって、タグに別のURLエイリアスを使用することを検討することをお勧めしますCSharp(「バックグラウンド」データベースフィールドを設定して、元の値をURLに適した値に「変換」することができます)。

于 2013-03-26T12:27:33.890 に答える