適当プログラマー

日本語がエスケープできないじゃないかこのやろう。

PHPのescapeshellarg関数とescapeshellcmd関数で日本語がうまく処理出来ない場合の対処法【Debian系】

PHPにはコマンドライン引数をエスケープするescapeshellarg関数と、コマンドを安全なコマンドにエスケープするescapeshellcmd関数というのがある。

ただ、私が試した時に日本語をエスケープしようとすると、日本語が消える、という問題が発生した。

ググったら、対応法を書いているサイトがいくつかあったんだけど、CentOS系ばかりでDebian系での対応法が無かったから書いておく。

/etc/apache2/envvars
編集前
## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

export LANG
編集後
## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
. /etc/default/locale

export LANG

27行目あたりのコードです。コメントアウトされていた. /etc/default/localeのコメントアウトを外しました。コメントアウトを外したあと、apacheを再起動すれば日本語もうまく対応できるようになります。ついでに/etc/default/localeの中身も載せておきます。

/etc/default/locale
#  File generated by update-locale
LANG=ja_JP.UTF-8

多分、Debianのデフォルトの言語です。もしあなたの環境がこれと違ったら、多分rootユーザーで以下のコマンドで直るよ。

# update-locale LANG=ja_JP.UTF-8

なおった?おめでとう。

このエントリーをはてなブックマークに追加