CodeIgniter 3.0の$config['uri_protocol']とURIセグメントの値
あまり問題になることはないと思いますが、設定によりURIセグメントの値が少々変わります。
具体的には、$config['uri_protocol']
の設定によって、URIセグメントの値がURLエンコードされたままかデコードされた値か変わります。
これは、config/config.php
に以下のように記載されています。
WARNING: If you set this to 'PATH_INFO', URIs will always be URL-decoded!
このように値が変わるのは、CodeIgniterが対応する$_SERVER
変数の値をそのまま使っているためです。デフォルトはREQUEST_URI
です。
検証
controllers/Sample.php
<?php
class Sample extends CI_Controller
{
public function index($arg = 'default')
{
echo html_escape($arg);
}
}
http://localhost:8000/sample/index/%3Cs%3E
にアクセスすると、
REQUEST_URI
の場合は%3Cs%3E
PATH_INFO
の場合は「The URI you submitted has disallowed characters.」
になります。
The URI you submitted has disallowed characters.になるのは、デコードされた値にCodeIgniterの「URIセキュリティ」仕様により許可されない文字列が含まれるからです。
Date: 2016/03/31