多分そう 公開日: 2015-01-23 16:03
PHPのiconvまたはmb_convert_encoding関数を使用して、gb2312をutf-8に変換するなどのエンコード変換を実行します特定の特殊文字 (マイナス記号、コネクタ) が表示されると、エンコーディングが正しく機能せず、疑問符「?」または「C」になる場合があります。さまざまな方法を試しましたが、まだこの問題をうまく解決できません。次のコードでは、//IGNORE が宣言された後も、接続記号「-」は記号「?」のままになります。
<?php$html = iconv($charset, 'utf-8//IGNORE', $html);
PHP 公式 Web サイトのマニュアルでネットユーザーが提供した解決策に従ってみましたが、問題が私のローカルの PHP バージョンに問題があるかどうかはまだわかりません。
解決策 1:
ロケール カテゴリ LC_CTYPE が C または POSIX に設定されている場合、iconv('UTF-8', 'ASCII//TRANSLIT', ...) は正しく動作しないことに注意してください。それ以外の場合は、別のロケールを選択する必要があります。非 ASCII 文字はすべて疑問符に置き換えられます。これは、少なくとも glibc 2.5 では当てはまります。
例:
[翻訳]
ロケール カテゴリ LC_CTYPE カテゴリが C または POSIX に設定されている場合、iconv は正しく機能しないことに注意してください。別の言語を選択する必要があります。選択しない場合、非 ASCLL エンコーディングはすべて疑問符「?」に置き換えられます。この問題は、glibc 2.5 以前でも発生します。
例は次のとおりです:
<?phpsetlocale(LC_CTYPE, 'POSIX');echo iconv('UTF-8', 'ASCII//TRANSLIT', "?lu?ou?ký k??\n");// ?lu?ou?k? k??setlocale(LC_CTYPE, 'cs_CZ');echo iconv('UTF-8', 'ASCII//TRANSLIT', "?lu?ou?ký k??\n");// Zlutoucky kun
解決策 2:
これにより、UTF-8 文字列から無効な文字が削除されます (データベースなどに挿入できるようになります)。「none」の代わりに値を使用することもできます。無効な文字の代わりにスペースを挿入したい場合は 32 です。
<?phpini_set('mbstring.substitute_character', "none");$text= mb_convert_encoding($text, 'UTF-8', 'UTF-8');
読む (75) コメント (0) コメントを見る