PHP编码从ISO-8859-1到UTF-8

时间:2011-06-27 06:21:13

标签: php encoding utf-8 iso-8859-1

<?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”。德语变音符号很好,但为什么“新”周围的引号没有正确转换?在PHP manual 中有一个函数fix_latin。使用此功能时,引号也会正确转换!?

PS:欧洲货币符号€(EUR)也是如此 - 它也转换错了(除了fix_latin函数),但为什么呢?

1 个答案:

答案 0 :(得分:2)

欧元符号不在ISO-8859-1中。 (ISO-8859-15是为此目的而创建的。)

我记得最好,mb_convert_encoding()不会音译字符。请考虑使用iconv()。和/或确保根据需要设置content-type标题。

在下一个PHP版本中,还会有Transliterator class,它包含了ICU。