PHP 文字列エンコードの問題
1. PHP エンコード変換関数
mb_convert_encoding ― 文字エンコードを変換 (PHP 4 >= 4.0.6, PHP 5)
使用法:
string mb_convert_encoding ( string str, string to_encoding [,mixed from_encoding] )
まず、php.ini で、extension=php_mbstring.dll
string iconv (string in_charset, string out_charset, string str) の前の ; を削除する必要があります。注: >2 番目のパラメータは、変換先のエンコーディングを指定するだけでなく、2 つのサフィックスを追加することもできます: //TRANSLIT と //IGNORE、
ここで:
//TRANSLIT は、変換できない文字を自動的に変換します。直接変換 1 つ以上の近似文字になると、
//IGNORE は変換できない文字を無視し、デフォルトの効果は最初の不正な文字から切り捨てられます。
変換された文字列を返すか、失敗した場合は FALSE を返します。
2. 文字列エンコーディング関数を自動的に取得します。
エンコーディングの識別に php の mb_detect_encoding 関数を使用すると、多くの人がこの問題に遭遇します。 GB2312 と UTF-8、または UTF-8 と GBK などのエンコーディングの誤った認識 (ここでは主に cp936 の判定について) ネット上では、mb_detect_encoding が短い文字によって誤判定されると言われています。
例:
$encode = mb_detect_encoding($keytitle, array("ASCII",'UTF-8',"GB2312',"GBK",'BIG5'));
if ( $encode == “UTF-8″){
$keytitle = iconv("UTF-8″,"GBK",$keytitle);
}
このコードの目的は文字列のエンコーディングが UTF-8 であることを検出します。そうであれば、GBK に変換します。ここで、mb はマルチバイトを意味し、その略語です。