0

xmlファイルに追加する前に、$XML_COMMENTの€記号を「euros」に置き換えたいと思います。

€記号がutf-8文字ではなく、simplexmlからエラーメッセージが表示されます

Warning: SimpleXMLElement::addAttribute(): string is not in UTF-8 in ...
Warning: SimpleXMLElement::asXML(): output conversion failed due to conv error, bytes 0x82 0x26 0x61 0x6D in ....

ユーロ記号は、MySQL(utf-8)データベースに「€」として表示されます

ただし、Webページのテキストエリアには正しく表示されます。

これらの異なるstr_replaceを使用してみました

$XML_COMMENT=str_replace('€','euros',$XML_COMMENT)
$XML_COMMENT=str_replace('€','euros',$XML_COMMENT)
$XML_COMMENT=str_replace(chr(128),'euros',$XML_COMMENT)
$XML_COMMENT=str_replace(chr(0xE2).chr(0×82).chr(0xAC),'euros',$XML_COMMENT)
$XML_COMMENT=str_replace(chr(0x82).chr(0x26).chr(0x61).chr(0x6D),'euros',$XML_COMMENT)

成功せず

参考:私はどこでもutf-8を使用しています(MySQL、Webページ、XML)

これが私のコードです

// ? : $XML_COMMENT= "bla bla bla € bla bla bla";
// ? : $XML_COMMENT= "bla bla bla € bla bla bla";
// expected : $XML_COMMENT= "bla bla bla euros bla bla bla";

$ProductLog_XML = simplexml_load_file($file);
$ProductUpdate = $ProductLog_XML->order->product->addChild('update');
$ProductUpdate->addAttribute('comment',$XML_COMMENT);
$fp=fopen(file, "w");
fwrite($fp, $ProductLog_XML->asXML());
fclose($fp);

regex / preg_replaceを使用する代替手段はありますか?

4

2 に答える 2

4

私は同じ問題を抱えていましたが、元のHTMLページがUTF-8であり、PHPでcURLを実行した後に「€」として出力される&euroを使用している場合は次のように機能します

$nodeValue = str_replace(chr(0xE2).chr(0x82).chr(0xAC), "", $nodeValue)
于 2013-01-13T15:55:05.640 に答える
3

htmlentities()ユーロ記号を含むすべてのエンティティを変換して、のように表示することができ€ます。

私はそれを次のように使用します:htmlentities($str, ENT_QUOTES|"ENT_HTML401", "UTF-8", true)

以下を使用することを選択できますhtmlentities($XML_COMMENT, ENT_QUOTES | ENT_IGNORE, "UTF-8", true)。フラグの変更内容の詳細については、以下のリンクにアクセスしてください。OP @baptmeからの要求に応じて(コメントを参照)。

ソース:php.netリファレンス

于 2012-06-08T11:51:48.250 に答える