みなさん、こんばんわ。
とりあえず、ふとメモとして書きたいことがあったので記事にしておきます。
下記の文字を入力した際に文字化けが発生した場合は
この記事を読めば解決するかも。
*:..。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