みなさん、こんばんわ。


とりあえず、ふとメモとして書きたいことがあったので記事にしておきます。


下記の文字を入力した際に文字化けが発生した場合は

この記事を読めば解決するかも。


*:..。o○☆゚・:,。*:..。o○☆*:..。o○☆゚・:,。*:..。o○☆*:..。o○☆゚・:,。*:..

浬 欺 圭 構 蚕 杤 歃 濬 畚 秉 十 申 曾 箪 貼 ― ソ Ы Ⅸ 噂
能 表 暴 予 禄 兔 喀 媾 彌 拿 綵 臀 藹 觸 軆 鐔 饅 鷭 偆 砡

*:..。o○☆゚・:,。*:..。o○☆*:..。o○☆゚・:,。*:..。o○☆*:..。o○☆゚・:,。*:..


他にもあるかもしれませんが…


さて、何故この文字では文字化けが起こるのでしょうか?


最大の問題点は、「エスケープ記号」です。


この記号を利用すると通常では表現しにくい

タブ(\t)改行(\n)等を記述することが出来ます。


そして、このエスケープ記号とは「¥」のことで文字コードでは「5C」です。


シフトJISの文字コード表を見てみると

上記の文字の後半には「5C」が含まれております。


この「5C」が文字化けの原因です。


シフトJISを処理する際には、この「5C」を検出した場合

次の1バイトはエスケープ文字と判断されます。


つまり以下の通りです。


例:「表示」という文字の処理の流れ


1.元データ 95 5C 8E A6

2.エスケープ文字検出 95 5C 8E A6

3.「8E」がエスケープ文字として認識される為、「5C」は削除

4.残ったデータ 95 8E A6

5.データを解釈すると…「侮ヲ(半角文字)」


となり、文字化けが発生します。

(上記は少し分かりにくいかもしれませんが…)


さて、この問題を解決する方法はないのでしょうか?


もちろんあります。


この「¥(5C)」をエスケープ文字と認識させず残しておけば良いのです。

いえ、認識されても「¥(5C)」を残せば良いのです。


この「¥(5C)」を表示するには「¥(5C)¥(5C)」と2つ続けて入力します。


そうすると、エスケープされて「¥(5C)」が残り通常通り表示されます。


この「¥(5C)」を追記して上手に処理してくれる処理が…


$str = addslashes($str)

です。便利な関数ですね。


ちなみに、これを逆に取り除いてくれるものが…


$str = stripslashes($str)


です。


後半、凄く端折ってる感じですが、文字リストのメモですので…(;^_^A