質問

私に合格する必要があり符号化された文字列をCodeIgniterコントローラです。

:

DOSOMETHING/Coldplay/Fix+You/273/X+%26+Y/

私の問題の象徴である許可します。私を変えようとしたコンフィグファイルの

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+\%';

+ okですが、 % は有効ではありません。まったこの日expうにすることにより、 % シンボル?感謝。

役に立ちましたか?

解決

入力の上、それぞれの-"の末尾に文字列で取得しとして解釈されます。の%は既に許可されている文字としてリストがご覧いただけます。

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+-';

コホ...を見てからサンプル文字列です。ここではなぜ"The URI you submitted has disallowed characters".

短い説明:追加のアンパサンド & の許文字一覧

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+&-';

長説明

が2つも遊んでます。

A) CodeIgniterチェックすべてのURI セグメント のために許可します。これによりホワイトリスト登録可能文字です。から、最もあてはまるも許可チェックイン可能な/system/application/config/config.php$config['permitted_uri_chars'] 可変となります。デフォルトの値がセットになった 'a-z 0-9~%.:_-'.したがって、すべての文字にaからz、宇宙、すべての数および次の文字*~%.:_- を許可する。

Okを比較してみようとおURIの例するという作品

a-z 0-9~%.:_-
DO_SOMETHING/Coldplay/Fix+You/273/X+26+Y/   //note the missing %

すべての文字はok...でも、ちょっと待ったのにプラス記号 +?このリストに含まれていないの許されます。そのURIが不満ですか?このキーへの問題です。

B) CodeIgniter urldecodes URIのセグメント前whitelist文字のチェックを防ぐため、人circumventsのチェックだけでurlencodingのURIです。このように + が復号化される空間です。この行動が urlencode (符号化の狭いスペース + サインから逸脱してい RFC1738).その理由を説明し + サインが可能です。

これら二つについて合の説明もなぜこの特定のURIの方法でやらねばならない。

urldecode(DO_SOMETHING/Coldplay/Fix+You/273/X+%26+Y/) //evaluates to
//DO_SOMETHING/Coldplay/Fix You/273/X & Y/

絵で...のurldecodingに変換す %26&

ではない可能性をもつ。不思議な銅像;-)解決

他のヒント

してみてください:$config['uri_protocol']="PATH_INFO";

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top