用 preg_replace 替换空 space 会导致 UTF-8 无效字符
Replacing empty space with preg_replace causes invalid characters with UTF-8
我们的 PHP
网络应用程序(Windows Server 2008 R2
上的 PHP 5.6.30
运行)使用 UTF-8
编码,但需要从使用 Windows-1252
。导入数据时,它会转换为 UTF-8
,如下所示。
iconv('Windows-1252', 'UTF-8', $value);
当我们导入以下示例数据时,大多数 Windows-1252
字符的转换工作正常,但在下面的第 8 行中,à
字符出现问题并且未正确转换。
1;€
2;é
3;è
4;ë
5;ï
6;ä
7;á
8;à
9;ç
10;ß
11;ø
12;í
13;ì
14;ñ
15;@
16;û
这里是显示在网站上显示此数据的结果的屏幕截图。
有谁知道为什么 PHP
iconv
没有正确转换 à
字符?
我解决了这个问题,但它最终与我最初认为的 iconv
无关。所需的更改是如此之小,只有一个字符,但我花了很长时间才找到它。事实证明,违规声明实际上如下:
preg_replace('/\s+/', ' ',$columnvalue))
此正则表达式的目的是从值中删除白色 space,但由于编码是 UTF-8
,此 regular expression
具有破坏 [=15] 的残留效果=] 字符。我解决了这个问题,但将 u
(unicode modifier
) 添加到正则表达式定义的末尾。所以表达式变成了:
preg_replace('/\s+/u', ' ',$columnvalue))
然后页面的编码是正确的。
我们的 PHP
网络应用程序(Windows Server 2008 R2
上的 PHP 5.6.30
运行)使用 UTF-8
编码,但需要从使用 Windows-1252
。导入数据时,它会转换为 UTF-8
,如下所示。
iconv('Windows-1252', 'UTF-8', $value);
当我们导入以下示例数据时,大多数 Windows-1252
字符的转换工作正常,但在下面的第 8 行中,à
字符出现问题并且未正确转换。
1;€
2;é
3;è
4;ë
5;ï
6;ä
7;á
8;à
9;ç
10;ß
11;ø
12;í
13;ì
14;ñ
15;@
16;û
这里是显示在网站上显示此数据的结果的屏幕截图。
有谁知道为什么 PHP
iconv
没有正确转换 à
字符?
我解决了这个问题,但它最终与我最初认为的 iconv
无关。所需的更改是如此之小,只有一个字符,但我花了很长时间才找到它。事实证明,违规声明实际上如下:
preg_replace('/\s+/', ' ',$columnvalue))
此正则表达式的目的是从值中删除白色 space,但由于编码是 UTF-8
,此 regular expression
具有破坏 [=15] 的残留效果=] 字符。我解决了这个问题,但将 u
(unicode modifier
) 添加到正则表达式定义的末尾。所以表达式变成了:
preg_replace('/\s+/u', ' ',$columnvalue))
然后页面的编码是正确的。