次の関数を使用して、html文字列の内部htmlを取得しています
function DOMinnerHTML($element)
{
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$tmp_dom = new DOMDocument('1.0', 'UTF-8');
$tmp_dom->appendChild($tmp_dom->importNode($child, true));
$innerHTML .= trim($tmp_dom->saveHTML());
}
return $innerHTML;
}
私のhtml文字列にはユニコード文字も含まれています。これはhtml文字列の例です
$html = '<div>Thats True. Yes it is well defined آپ مجھے تم کہہ کر پکاریں</div>';
上記の機能を使用すると
$output = DOMinnerHTML($html);
出力は以下のとおりです
$output = '<div>Thats True. Yes it is well defined
کے۔سلطا</div>';
数値に変換された実際の Unicode 文字。
コードをデバッグしたところ、次の行の前に DOMinnerHTML 関数であることがわかりました
$innerHTML .= trim($tmp_dom->saveHTML());
私が反響すれば
echo $tmp_dom->textContent;
実際のユニコード文字が表示されますが、保存する$innerHTML
と数字記号が出力されます。なぜそれをしているのか。
注: 数値記号を実際の Unicode 文字に変換する html_entity_decode のような関数を提案しないでください。変換したくない html 文字列にユーザー形式のデータも含まれているためです。
注:私も入れてみました
<meta http-equiv="content-type" content="text/html; charset=utf-8">
私のhtml文字列の前ですが、違いはありません。