これについて何か助けていただければ幸いです。私はこの問題に何日も費やしましたが、オンラインで見つけた提案のどれも私に解決策を与えてくれないようです.
サプライヤからの CSV ファイルがあります。Microsoft システムからエクスポートされたようです。
PHP を使用してデータを MySQL (両方とも最新バージョン) にインポートしています。
取り除けない奇妙なキャラクターを含む特定のレコードが 1 つあります。文字を手動で編集して削除することは可能ですが、これは 1 日に複数回行われるため、自動化されたソリューションを希望します。
この文字は、「スマート クォート」の解釈のようです。16 進エディタは、文字コードが C2 と 92 であることを教えてくれます。16 進エディタでは、奇妙な A の後にスマート クォートが続くように見えます。他のエディタや Calc、Writer などでは、ボックスとして表示されます。"</p>
エンコーディングを決定するために mb_detect_encoding を使用しています。CSV ファイル内のすべてのレコードは、UTF-8 として返される奇妙な文字を含むものを除いて、ASCII として返されます。問題のあるレコードを MySQL に挿入すると、Workbench に正方形として表示されます。
MySQL テーブルは に設定されてutf-8 – utf8_unicode_ci
おり、その他の異常な UTF 文字 (分数など) は問題ありません。
私はこれに対して多くの解決策を試しました...
- PHPで不正なutf-8文字列を検出するには?
- 文字列から非 utf8 文字を削除する
- 無効または不完全なマルチバイト文字の削除
- PHPで不正なutf-8文字列を検出するには?
- PHP で Microsoft エンコードの引用符を置き換える方法
などなどですが、どれも私のために働いていません。
私が実際にやりたいのは、問題のある文字を削除または置換することです。理想的には、16 進値の検索と置換を行いますが、試した例はどれも機能しませんでした。
誰でも私がこれを進めるのを手伝ってくれますか?
編集:
評判が不十分な
ため、回答を投稿できません:ご意見ありがとうございます。とても有難い。
16進検索と置換を使用します。
$DodgyText = preg_replace("/\xEF\xBE\x92/", "" ,$DodgyText);
それがエレガントな解決策ではないことはわかっていますが、簡単な修正が必要であり、これでうまくいきます。