2

HTML ファイルがあり、メモ帳で表示すると、次のように表示されます。

<p><span>Copyright © 2008 Your Company Name</span>

著作権記号に注意してください。

HTML をロードし、これを実行します。

$html = file_get_contents('test.html');
$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");
file_put_contents('output.html', $html);

html をメモ帳で再度表示すると、著作権記号が消えてスペースに置き換えられている?!

著作権記号を&copy;またはに置き換えて&#169ください。これはmb_convert_encodingHTML-ENTITIESオプションで行うことではありませんか?

これは私が使用しているテスト HTML ファイルです。

4

2 に答える 2

8

テスト HTML ページはUTF-8 でエンコードされていません。したがって、mb_convert_encodingが著作権文字 (序数値 169) を見ると、無効な UTF-8 シーケンスとして認識したものをどう処理するかわかりません。

したがって、 を呼び出すときは、正しい入力エンコーディングを指定する必要がありますmb_convert_encoding

$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'ISO-8859-1');

または、次のようなものを使用できます

$html = htmlentities($html, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1');

注:私はあなたの質問に直接答えていますが、あなたは何のために変換が必要かを言いません. 目標を達成するためのより良い方法がある可能性があります。

于 2012-05-01T10:55:51.610 に答える
0

HTML を UTF-8 として提供している場合、正しいアクションは確かに何もありません。

<p><span>Copyright © 2008 Your Company Name</span>

完全に有効な html です。このページのページ ソースを見てください。

于 2012-05-01T10:53:05.277 に答える