4
4

3 に答える 3

8

DOMDocument は漢字をコードに変換するようです [...]。中国語やその他の外国語をコードに変換せずにそのまま保持するにはどうすればよいですか?

$dom = new DOMDocument();
$dom->loadHTML($html);

関数を使用しloadHTMLて HTML チャンクをロードしている場合。デフォルトでDOMDocumentは、その文字列は HTML のデフォルト エンコーディング ( ) であると想定されますがISO-8859-1、ほとんどの場合、文字セット (sic!) は使用している文字列の横にあるメタ情報であり、内部ではありません。これをさらに複雑にするために、そのメタ情報は文字列内にさえある必要があります。

とにかく、HTML の文字列データを共有しておらず、エンコーディングを指定していないため、何が起こっているのかを具体的に伝えるのは困難です。

HTML は UTF-8 でエンコードされていると思いますが、これは HTML 文字列内で通知されません。したがって、次の回避策が役立ちます。

$doc = new DOMDocument();
$doc->loadHTML('<?xml encoding="UTF-8">' . $html);

// dirty fix
foreach ($doc->childNodes as $item)
    if ($item->nodeType == XML_PI_NODE)
        $doc->removeChild($item); // remove hack
$doc->encoding = 'UTF-8'; // insert proper

エンコードのヒントが最初に挿入されます (HTML が読み込まれた後に削除されます)。その時点から、DOMDocument(いつものように) UTF-8 を返します。

于 2012-05-31T13:50:28.080 に答える
2

同様の問題の解決策を探しているときに、このスレッドに出くわしました。htmlを適切にロードし、Xpathなどで解析を行った後、テキストは次のようになります。

&#20320;&#30340;&#20081;&#21457;

これはHTMLの本文では正常に表示されますが、スタイルまたはスクリプトタグ(中国語フォントの設定など)では正しく表示されません。

これを修正するには、lauthiamkokが行った逆の操作を行います。

$html = mb_convert_encoding($html, "UTF-8", "HTML-ENTITIES");

何らかの理由で最初の回避策が機能しない場合は、この変換を試してください。

于 2012-09-14T04:21:33.163 に答える
0
于 2012-05-21T12:47:52.000 に答える