更换用的preg_replace空白导致无效字符,UTF-8
问题描述:
我们PHP
Web应用程序(PHP 5.6.30
上Windows Server 2008 R2
运行)使用UTF-8
编码,但需要从正在使用Windows-1252
编码的文件导入数据。数据导入时,按如下所示转换为UTF-8
。更换用的preg_replace空白导致无效字符,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))
这个正则表达式的目的是从价值删除空白,但因为编码为UTF-8
此regular expression
有破坏à
的剩余效应字符。我解决了这个问题,但在正则表达式定义的末尾添加了u
(unicode modifier
)。所以表达式变成:
preg_replace('/\s+/u', ' ',$columnvalue))
然后页面的编码是正确的。
'$ this-> encoding'的临界值是? –
@MarkBaker对不起,该值是'Windows-1252'。将更新问题以反映这一点。 – BruceHill
您是否尝试过使用标题编码?或'iconv_set_encoding'? –