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

发布于 2024-11-17 01:51:50 字数 922 浏览 2 评论 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";

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乜一 2024-11-24 01:51:50

欧元符号不在 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 using iconv() instead. And/or be sure to set the content-type header as needed.

In the next PHP version there will also be the Transliterator class, which wraps ICU.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文