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

Tags: codeigniter, security