2017年12月4日月曜日

パスに日本語が含まれる場合の $_SERVER問題

パスに日本語(エンコードされたリンクURLではなく、デコード後文字列)が含まれる場合、$_SERVER の中身に問題が発生します。

REQUEST_URIはエンコードされたままの文字列が入るので、問題ありません。
しかし、その他はデコード後のURLが入ります。
SCRIPT_NAME, PHP_SELF, PATH_INFO です。
特に SCRIPT_NAME はよく使う物なので、非常にやっかいです。

簡単に対応させる方法は2つ

その1:explode('/', $_SERVER['SCRIPT_NAME']) で分解し、ループでエンコードして再度結合させる。
その2:REQUEST_URIの?以降を削除して使う。

その2が簡単で良いと思います。
REQUEST_URIはブラウザから送られてきた値なので、扱いには注意してくださいね。


ちゃんとエンコードしないと、用法と文字の組み合わせ次第でエラーになるので気を付けましょう。