PHP で HTML 文字列をロードするときに DOMDocument が UTF-8 エンコーディングで苦労するのはなぜですか?

DDD
リリース: 2024-11-04 09:33:30
オリジナル
563 人が閲覧しました

Why does DOMDocument struggle with UTF-8 encoding when loading HTML strings in PHP?

DOMDocument エンコーディングの問題

PHP DOMDocument ドキュメントでは、すぐに UTF-8 エンコーディングをサポートしていることが示唆されていますが、提供されているコード サンプルが示すように、常にサポートされるわけではありません。ケース。この問題は、DOMDocument::loadHTML() が、歴史的に ISO-8859-1 (Latin-1) である特定のエンコーディングの HTML 文字列を想定しているために発生します。

文字列を HTML エンティティに変換する

この問題を解決するには、文字列を DOMDocument が処理できるエンコーディングに変換する必要があります。 1 つのオプションは、非 ASCII 文字を HTML エンティティに変換し、効果的にエスケープすることです。これは、'HTML-ENTITIES' ターゲット エンコーディングを指定した mb_convert_encoding() 関数を使用して実現できます。

Content-Type Meta Tag の追加

もう 1 つのアプローチは、ドキュメントのエンコーディングをヒントにすることです。 を追加することで、タグを HTML 文字列の先頭に追加します。このタグは文字セットを指定します。この場合は UTF-8:

<meta http-equiv="content-type" content="text/html; charset=utf-8">
ログイン後にコピー

このメタ タグは自動的に に配置されます。

コード例

HTML エンティティの使用例を示します。

$html = '&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
<html><head><title>Test!</title></head><body><h1>☆ Hello ☆ World ☆</h1></body></html>';

$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadHTML($html);

header('Content-Type: text/html; charset=utf-8');
echo($dom->saveHTML());
ログイン後にコピー

使用方法どちらの方法でも、DOMDocument が UTF-8 文字を正しく処理できることを確認でき、プログラムが目的の結果を出力できるようになります。




    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    Test!


    

☆ Hello ☆ World ☆

ログイン後にコピー

以上がPHP で HTML 文字列をロードするときに DOMDocument が UTF-8 エンコーディングで苦労するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!