PHPDOMクラスで問題が発生しています。
サイトマップスクリプトを作成していますが、$ doc-> saveXML()の出力は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<url>
<loc>http://www.somesite.com/serviços/redesign</loc>
</url>
</root>
また
<?xml version="1.0" encoding="UTF-8"?>
<root>
<url>
<loc>http://www.somesite.com/serviços/redesign</loc>
</url>
</root>
しかし、私は得ています:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<url>
<loc>http://www.somesite.com/servi&#xE7;os/redesign</loc>
</url>
</root>
これは、番号付きエンティティに名前が付けられた置換関数を使用して取得できるクローゼットです。
再現もできました
<?xml version="1.0" ?>
<root>
<url>
<loc>http://www.somesite.com/servi&#xE7;os/redesign</loc>
</url>
</root>
ただし、エンコーディングが指定されていません。
最善の解決策(コードの記述方法)は次のとおりです。
<?php
$myArray = array();
// do some stuff to populate the with URL strings
$doc = new DOMDocument('1.0', 'UTF-8');
// here we modify some property. Maybe is the answer I am looking for...
$urlset = doc->createElement("urlset");
$urlset = $doc->appendChild($urlset);
foreach($myArray as $address) {
$url = $doc->createElement("url");
$url = $urlset->appendChild($url);
$loc = $doc->createElement("loc");
$loc = $url->appendChild($loc);
$valueContent = $doc->createTextNode($value);
$valueContent = $loc->appendChild($address);
}
echo $doc->saveXML();
?>
ノート:
- サーバー応答ヘッダーには、UTF-8として文字セットが含まれています。
- PHPスクリプトはUTF-8で保存されます。
- 読み取られるURLはUTF-8文字列です。
- 上記のスクリプトには、DOMDocumentコンストラクターのエンコード宣言が含まれており、htmlentities、urlencode、utf8_encodeなどの変換関数は使用されていません。
DOMDocumentプロパティのDOMDocument::$resolveExternalsとDOMDocument::$substituteEntitiesの値を変更してみました。組み合わせは機能しませんでした。
はい、DOMDocumentコンストラクターで文字セットを指定せずにすべてのプロセスを作成し、文字列の内容を変数にダンプし、文字列置換関数を使用して非常に単純な文字列置換を行うことができることを知っています。これは機能します。しかし、私はどこで滑っているのか、ネイティブAPIと設定を使用してこれをどのように行うことができるのか、またはこれが可能であるとしても知りたいです。
前もって感謝します。