0
<?php
mb_internal_encoding('UTF-8');
mb_language('uni');
$a=file_get_contents("http://www.ciao.de/Erfahrungsberichte/8x4_Wild_Flower_Deo_Spray__8937431");
preg_match('/dass auf dem Versch(.*)ziehen mich/Us',$a,$b);
$b=$b[1];
echo $b."\n";
echo utf8_encode($b)."\n";
echo mb_convert_encoding($b,'UTF-8','iso-8859-1')."\n";

結果は

lussdeckel riesengro▒ und un▒bersehbar glitzernd ein ▒New▒ prangt. Neue Produkte
lussdeckel riesengroß und unübersehbar glitzernd ein �New� prangt. Neue Produkte
lussdeckel riesengroß und unübersehbar glitzernd ein �New� prangt. Neue Produkte

HTTP ソース コードは、メタ タグで「iso-8859-1」を使用することを提案しています。ドイツ語のウムラウトは問題ありませんが、「New」を囲む引用符が正しく変換されないのはなぜですか? PHPマニュアル には、関数 fix_latin があります。この関数を使用すると、引用符も正しく変換されます!?

PS: ヨーロッパの通貨記号 € (EUR) でも同じことが起こります - これも間違って変換されます (fix_latin 関数を除く) が、なぜですか?

4

1 に答える 1

1

ユーロ記号は ISO-8859-1 にはありません。(ISO-8859-15 はその目的のために作成されました。)

私が覚えている最善の方法は、mb_convert_encoding()文字を音訳しないことです。iconv()代わりに使用することを検討してください。またはcontent-type、必要に応じてヘッダーを設定してください。

次の PHP バージョンには、ICU をラップするTransliterator クラスもあります。

于 2011-06-27T06:42:11.220 に答える