栃木,Web,WordPress,スマートフォン,野球,ラグビーなど
全角スペースを半角スペースに変換する際に気をつけなきゃいけないこと(PHP&EUC-JPの場合)
PHP且つ文字コードがEUC-JPで、全角スペースを半角スペースに置き換える際のメモ。
検索サイトやWebサイトなどで、2つ以上の単語がスペースで繋いで入力された場合、
単語間の全角スペースを半角スペースに置換してるサイトが結構あったりする。
yahoo然り、gooも然り。
昔はUNIXの日本語環境だと、EUC-JPが標準だったみたいけど、LinuxではUTF-8が一般的になっている。
で、前置きが長くなりましたが、
(1)ユーザーが、テキストエリアに”特定の文字”を入力する
(2)システムが、全角スペースを検出して、半角スペースに置換する処理をする
(3)1.で全角スペースは入力されてないのに、全角スペースと判定されちゃう
というケースがあるので気をつけようぜ、という話。
1.の特定の文字というのは、前の文字のEUC文字コードが”A1”で終わり、後の文字のコードが”A1”で始まる組み合わせ。※EUC文字コードはコチラ
2.が、preg_replace(“/ +/”,” “,$carp);
という処理になっていて、例えば、$carp変数に”ファーストサーバ”という文字列が入ってくると、
“フ”+”璽好肇機璽”という2つの単語に分割されてしまう。
理由としては、”ァ”の文字コード”a5a1″と、”ー”の文字コード”a1bc”の組み合わせが、”a1a1″(全角スペース)と認識されてしまい、結果として、”フ”+”璽好肇機璽”になっちゃいます。
ググってみると、これでハマった人も何人かいるみたいで、preg_replace関数のバグだべ!っていう意見も出てたけども、
「文字コードがEUCで、文字列の全角スペースを半角スペースに置換する際は、preg_replace関数は使わないようにする。」が正解みたい。
EUC-JPで全角スペース→半角スペースの変換を行う場合は、
mb_convert_kana($carp,”s”,”EUC-JP”);
とすればおkです。※”s”は全角スペースを半角スペースに変換するオプション。
印刷 | この記事は ohsexybaby によって 2012/09/05 7:38 PM に投稿されました, Linux, Web 以下に保存されています。 RSS 2.0 を通してコメントをフォローする。 コメントを残すか、ご自分のサイトからトラックバックできます。 |