ガレコレ
Garage Collection
 
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()

  &
 
 
&
  "
 
 
"
  <
 
 
&lt;
  >
 
 
&gt;

※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
 
お問い合わせ
by Network Communication Note