PHP 编码从 ISO-8859-1 到 UTF-8
<?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";
HTTP 源代码中的结果
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
建议在元标记中使用“iso-8859-1”。德语元音变音没问题,但为什么“New”周围的引号没有正确转换?在 PHP 手册 中有是一个函数fix_latin。使用此功能时,引号也能正确转换!?
PS:欧洲货币符号 € (EUR) 也会发生同样的情况 - 它也转换错误(除了使用 fix_latin 函数),但为什么呢?
<?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";
results in
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 source code suggests in meta tag to use "iso-8859-1". German umlauts are fine, but why are the quotes around "New" not converted correctly? In PHP manual there is a function fix_latin. When using this function the quotes are also converted correctly!?
PS: same occurs with european currency symbol € (EUR) - it's also converted wrong (except with the fix_latin function), but why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
欧元符号不在 ISO-8859-1 中。 (ISO-8859-15 就是为此目的而创建的。)
据我所知,
mb_convert_encoding()
不会音译字符。考虑使用iconv()
代替。和/或确保根据需要设置content-type
标头。在下一个 PHP 版本中,还会有 Transliterator 类,它包装了重症监护病房。
Euro sign is not in ISO-8859-1. (ISO-8859-15 was created for that purpose.)
Best I recollect,
mb_convert_encoding()
will not transliterate characters. Consider usingiconv()
instead. And/or be sure to set thecontent-type
header as needed.In the next PHP version there will also be the Transliterator class, which wraps ICU.