PHPを使用して、次のようなUnicode文字を含むテキストファイルを解析します
スマイリーをさらにエンコード/デコードせずにファイルを読み込むだけで、解析され、json_encoded になり、出力は次のようになります。\u00f0\u009f\u0098\u008d
JavaScript ファイルは .json データを取得し、エスケープされた 4 文字を次のように出力します。ð
ユニコード表を見ると、シンボルは「SMILING FACE WITH HEART-SHAPED EYES」と呼ばれ、ユニコード番号U+1F60D
(128525)を持っています
この場合、4 つのコード単位を unicodenumber または理想的には適切な html エンコードされた方法に変換する方法はありますか😍
変換を見ると、utf 8 コード単位は似ていますが (F0 9F 98 8D 0A 0A)、取得した 4 つのエスケープ単位を再現できないため、何を見ているのかさえわかりません。
更新: 私は間違いを犯し、2 番目の段落を編集しました:\u00f0\u009f\u0098\u008d
既に json_encode(); の結果です。
これは、ファイルからデータを読み取る基本的な関数です。ソースを見ると、スマイリーは「ハードコード」されているため、実際に表示されます
function readLocalFile() {
$file_html = fopen('output.html', "r");
$html = "";
while(!feof($file_html)) {
$html .= fgets($file_html);
}
fclose($file_html);
// here I use regex to filter for specific tags, the result is an array
$cleanData = parseData($html);
saveToFile(json_encode($cleanData));
}
コンテンツと同じようにダミー.htmlを作成したところ、これは正しい結果
\ud83d\ude0d
を返しますが、データ全体のコンテキストでは、上記のようにまだ壊れています。
データが に保存される方法を確認する必要がoutput.html
あります。そこに問題があるはずです。私はずっと問題の間違った部分を見てきました。
最終更新: ようやくエラーが見つかりました。それはparseData関数にあり、loadHTMLはどういうわけかコンテンツを文字化けし、ここで解決策を見つけました: PHP DOMDocument loadHTMLがUTF-8を正しくエンコードしていません