6

mb_PHP関数に基づいてデータベースに保存するために、インポートされたIPTCメタデータを画像からUTF-8に自動的に変換しようとしています。

現在、次のようになっています。

$val = mb_convert_encoding($val, 'UTF-8', mb_detect_encoding($val));

ただし、mb_detect_encoding()ASCII 文字列 (Latin1 フィールドの 192 ~ 255 の特殊文字) が提供されると、それが UTF-8 として検出されるため、すべてを適切な UTF-8 に変換しようとすると、すべての特殊文字が削除されます。

Latin1 の値を探して独自のメソッドを作成しようとしましたが、何も起こらなかった場合mb_detect_encodingは、それが何であるかを判断させます。しかし、他のエンコーディングが他のものに同じバイト値を使用していないかどうか確信が持てないことに気付いたとき、途中でやめました。

mb_convert_encodingでは、ソース エンコーディングとしてフィードする ASCII を適切に検出する方法はありますか?

4

3 に答える 3

17

ASCII が最初に検出されるカスタム オーダーを指定すると機能します。

mb_detect_encoding($val, 'ASCII,UTF-8,ISO-8859-15');

完全を期すために、利用可能なエンコーディングのリストはhttp://www.php.net/manual/en/mbstring.supported-encodings.phpにあります。

于 2013-04-30T12:20:15.370 に答える
0

許可するエンコーディングについて心配したくない場合は、それらをすべて追加できます

$encoding = mb_detect_encoding($val, implode(',', mb_list_encodings()));

于 2017-03-28T08:42:34.100 に答える