ホームページ >バックエンド開発 >PHPチュートリアル >PHPエンコード変換マイナス記号(コネクター)が変換できない問題

PHPエンコード変換マイナス記号(コネクター)が変換できない問題

WBOY
WBOYオリジナル
2016-06-23 13:36:591344ブラウズ

PHPエンコード変換マイナス記号(コネクター)が変換できない問題技術

多分そう 公開日: 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&yacute; k??\n");// ?lu?ou?k? k??setlocale(LC_CTYPE, 'cs_CZ');echo iconv('UTF-8', 'ASCII//TRANSLIT', "?lu?ou?k&yacute; 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) コメントを見る


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。