PHPのShift-JISでの文字化け

Red Hat Linuxのページトップへ

ドレミファソ

詐欺
圭介
機構


申告
貼り付け
能力
表現
饅頭
はShift-JISのPHPで文字化けする可能性があるので注意!!

文字コードで末尾が5Cになっている文字は文字化けを起こす。
Shift-JISでは5Cは『\』を表すためである。
これがエスケープ文字とされたりすることでエラーが起こる。

例えば以下の場合でも…
<?echo "ソ";?>
エラー
Parse error: syntax error, unexpected $end in /public_html/test.php on line 1


―ソ噂欺圭構蚕十申貼能表饅
よく使うもので上記のものがある

エラーが起こるケースと対処
""の末に、この文字が来るとき
str_replace(" ","","ソ ")
にするとか

フォームのPOSTやGETでこの文字を含む場合
magic_quotes_gpc = Onだと自動エスケープなのでOffにして
変換後 = addslashes( "対象文字");

またはOnで
変換後 = stripslashes("対象文字");

.htaccessでは
Onは
php_value "magic_quotes_gpc" "1"
Offは
php_value "magic_quotes_gpc" "0"

単純にShift-JISを使わないとか…

PHPのShift-JISで文字化けを起こす文字コードの一覧と文字の一覧

コード文字コード文字コード文字コード文字 コード文字コード文字コード文字コード文字
%00%5c\ %20%5c \ %40%5c@\ %60%5c`\ %80%5c\ %a0%5c\ %c0%5cタ\ %e0%5c
%01%5c\ %21%5c!\ %41%5cA\ %61%5ca\ %81%5c %a1%5c。\ %c1%5cチ\ %e1%5c
%02%5c\ %22%5c"\ %42%5cB\ %62%5cb\ %82%5c\ %a2%5c「\ %c2%5cツ\ %e2%5c
%03%5c\ %23%5c#\ %43%5cC\ %63%5cc\ %83%5c %a3%5c」\ %c3%5cテ\ %e3%5c
%04%5c\ %24%5c$\ %44%5cD\ %64%5cd\ %84%5cЫ %a4%5c、\ %c4%5cト\ %e4%5c
%05%5c\ %25%5c%\ %45%5cE\ %65%5ce\ %85%5c\ %a5%5c・\ %c5%5cナ\ %e5%5c
%06%5c\ %26%5c&\ %46%5cF\ %66%5cf\ %86%5c\ %a6%5cヲ\ %c6%5cニ\ %e6%5c
%07%5c\ %27%5c'\ %47%5cG\ %67%5cg\ %87%5c\ %a7%5cァ\ %c7%5cヌ\ %e7%5c
%08%5c\ %28%5c(\ %48%5cH\ %68%5ch\ %88%5c\ %a8%5cィ\ %c8%5cネ\ %e8%5c
%09%5c \ %29%5c)\ %49%5cI\ %69%5ci\ %89%5c %a9%5cゥ\ %c9%5cノ\ %e9%5c
%0a%5c \ %2a%5c*\ %4a%5cJ\ %6a%5cj\ %8a%5c %aa%5cェ\ %ca%5cハ\ %ea%5c
%0b%5c \ %2b%5c+\ %4b%5cK\ %6b%5ck\ %8b%5c %ab%5cォ\ %cb%5cヒ\ %eb%5c\
%0c%5c \ %2c%5c,\ %4c%5cL\ %6c%5cl\ %8c%5c %ac%5cャ\ %cc%5cフ\ %ec%5c\
%0d%5c \ %2d%5c-\ %4d%5cM\ %6d%5cm\ %8d%5c %ad%5cュ\ %cd%5cヘ\ %ed%5c\
%0e%5c\ %2e%5c.\ %4e%5cN\ %6e%5cn\ %8e%5c %ae%5cョ\ %ce%5cホ\ %ee%5c\
%0f%5c\ %2f%5c/\ %4f%5cO\ %6f%5co\ %8f%5c %af%5cッ\ %cf%5cマ\ %ef%5c\
%10%5c\ %30%5c0\ %50%5cP\ %70%5cp\ %90%5c %b0%5cー\ %d0%5cミ\ %f0%5c\
%11%5c\ %31%5c1\ %51%5cQ\ %71%5cq\ %91%5c %b1%5cア\ %d1%5cム\ %f1%5c\
%12%5c\ %32%5c2\ %52%5cR\ %72%5cr\ %92%5c %b2%5cイ\ %d2%5cメ\ %f2%5c\
%13%5c\ %33%5c3\ %53%5cS\ %73%5cs\ %93%5c %b3%5cウ\ %d3%5cモ\ %f3%5c\
%14%5c\ %34%5c4\ %54%5cT\ %74%5ct\ %94%5c %b4%5cエ\ %d4%5cヤ\ %f4%5c\
%15%5c\ %35%5c5\ %55%5cU\ %75%5cu\ %95%5c %b5%5cオ\ %d5%5cユ\ %f5%5c\
%16%5c\ %36%5c6\ %56%5cV\ %76%5cv\ %96%5c %b6%5cカ\ %d6%5cヨ\ %f6%5c\
%17%5c\ %37%5c7\ %57%5cW\ %77%5cw\ %97%5c %b7%5cキ\ %d7%5cラ\ %f7%5c\
%18%5c\ %38%5c8\ %58%5cX\ %78%5cx\ %98%5c %b8%5cク\ %d8%5cリ\ %f8%5c\
%19%5c\ %39%5c9\ %59%5cY\ %79%5cy\ %99%5c %b9%5cケ\ %d9%5cル\ %f9%5c\
%1a%5c\ %3a%5c:\ %5a%5cZ\ %7a%5cz\ %9a%5c %ba%5cコ\ %da%5cレ\ %fa%5c\
%1b%5c\ %3b%5c;\ %5b%5c[\ %7b%5c{\ %9b%5c %bb%5cサ\ %db%5cロ\ %fb%5c\
%1c%5c\ %3c%5c<\ %5c%5c\\ %7c%5c|\ %9c%5c %bc%5cシ\ %dc%5cワ\ %fc%5c\
%1d%5c\ %3d%5c=\ %5d%5c]\ %7d%5c}\ %9d%5c %bd%5cス\ %dd%5cン\ %fd%5c\
%1e%5c\ %3e%5c>\ %5e%5c^\ %7e%5c~\ %9e%5c %be%5cセ\ %de%5c゙\ %fe%5c\
%1f%5c\ %3f%5c?\ %5f%5c_\ %7f%5c\ %9f%5c %bf%5cソ\ %df%5c゚\ %ff%5c\

"ソ"なんて音楽系で使いそうなんで文字化けに気をつけないと
ブルキナファソ(Burkina Faso)ってレアな国名で初めて引っかかっちゃった

htmlspecialcharで
♥ハートとかも…
〜【〜の逆&#12316;】も『&』がエスケープされちゃうのです。
Shift-JISだと表示できないけどね
EUCとかは注意

ちなみに
〜は『全角チルダ』
〜『ウェーブダッシュ』

mb関係で
文字化けするんです
.htaccessで
php_value "output_buffering" "Off"
php_value "default_charset" "Shift_JIS"
php_value "output_handler" "none"
php_value "mbstring.language" "Japanese"
php_value "mbstring.internal_encoding" "SJIS"
php_value "mbstring.http_input" "auto"
php_value "mbstring.http_output" "SJIS"
php_value "mbstring.encoding_translation" "off"
php_value "mbstring.substitute_character" "none"

php_value "mbstring.substitute_character" "none"
ア奧^ムメモヤユヨラリルレロワン゙゚瓔磊糺脯蕘襠踴鍄顯鵆 @ABCDEFGHIJK