%のシンボルCodeIgniter URI
-
06-07-2019 - |
質問
私に合格する必要があり符号化された文字列を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";