パスに日本語(エンコードされたリンク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はブラウザから送られてきた値なので、扱いには注意してくださいね。
ちゃんとエンコードしないと、用法と文字の組み合わせ次第でエラーになるので気を付けましょう。