2014年1月8日(水)
PHPの文字変換関数 #■子猫の手 『子猫の手』において、ブログ&お知らせページで、分類ごとに表示させるのに、アドレスにパラメーターを追記するGET方式を採用しています。POST方式では、検索サイトに反映できないためです。
http://neconote.jp/baby/gc/blog_news.php?
class=★パソコン・通信
class(分類)に、マルチバイトの日本語を使っているので、本来は下記のようにURLエンコードする必要があります。
http://neconote.jp/baby/gc/blog_news.php?class=%E2%98%85%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%83%BB%E9%80%9A%E4%BF%A1
PHPでは、urlencode("★パソコン・通信")とすれば、class=以下の文字列に変換してくれます。
『子猫の手』のブログのシステムでは、ブラウザにおける自動判別機能に頼っていて、そこまで作り込んでいませんでした。IEで、問題を確認していますので、正式な方法に修正します。
また、今回いじくり回してみて、ようやく分類で利用できない文字に対して、方法が確立しました。ただ、修正箇所が広範囲に渡るので、少しお時間を下さいませ。
なお、いい機会なので、PHPにおける文字変換について整理しておきます。
■アドレス(URL)で利用
urlencode()
(例)あ
→
%82%a0
■HTML文書で利用
htmlspecialchars()
&
→
&
"
→
"
<
→
<
>
→
>
※htmlentities()では、ISO-8859-1文字セットが使われるので、日本語では利用できません。
■D/Bに格納
addslashes()
'
→
\'
"
→
\"
\
→
\\
※『子猫の手』では、HTMLを前提にしているので、D/Bに格納する際に、addslashes(htmlspecialchars("文字列"))として変換します。D/Bから取り出すと、htmlspecialchars("文字列")となります。
■メール送信するためシフトJISに変換する等
mb_language("Japanese");
//
初期値:neutral
mb_internal_encoding("SJIS");
//
初期値:ISO-8859-1
$email
=
"*@*.*";
$subject
=
mb_convert_encoding("題名","SJIS","UTF-8");
$body
=
mb_convert_encoding("本文","SJIS","UTF-8");
$name
=
mb_encode_mimeheader(mb_convert_encoding("名前","SJIS","UTF-8"));
$send
=
"*@*.*";
mb_send_mail($email,$subject,$body,
"From:
".$name."<".$send.">");
http://neconote.jp/tool/str.php