iconv() - UTF-8 到 ISO-8859-1 因德语变音符号而失败

问题描述 投票:0回答:1

我想在 php 中将字符串从 utf-8 转换为 iso-8859-1。 (实际上我想删除所有不在 ISO-8859-1 字符集中的字符)。

$text = "test 💂🏼‍♂️ test xäöüx x@x x€x";

$text = iconv('UTF-8', 'ISO-8859-1//IGNORE', $text);

预期输出为:test test xäöüx x@x xx

但我得到:test test x����x x@x xx

为什么 iconv 有德国变音符号的问题?以及为什么有疑问时不将其删除而是变成问号?

php iconv
1个回答
1
投票

字符 äöü(U+00E4、U+00F6 和 U+00FC 的价值)在 ISO-8859-1 中具有此编码:

  • ä: E4
  • ö: F6
  • ü: 全能

如果我们使用一些额外的调试信息运行您的代码的变体:

$text = 'äöü';
$text = iconv('UTF-8', 'ISO-8859-1//IGNORE', $text);
echo bin2hex($text);

...我们得到了预期的输出:

e4f6fc

您可以看到 � 有几个原因,所有这些都与您使用的任何渲染工具(我想是网络浏览器)有关:

  • 预计或不支持 ISO-8859-1。
  • 编码信息缺失或不正确。
  • 所选字体中缺少字形(这在浏览器中很少见,因为它们使用后备字体)。
© www.soinside.com 2019 - 2024. All rights reserved.