更换用的preg_replace空白导致无效字符,UTF-8

问题描述:

我们PHP Web应用程序(PHP 5.6.30Windows 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;û 

下面是显示在网站上显示此数据的结果的屏幕截图。

enter image description here

有谁知道为什么PHPiconv没有正确转换à人物?

+0

'$ this-> encoding'的临界值是? –

+0

@MarkBaker对不起,该值是'Windows-1252'。将更新问题以反映这一点。 – BruceHill

+0

您是否尝试过使用标题编码?或'iconv_set_encoding'? –

我解决了这个问题,它最终与iconv无关,就像我最初的想法。需要的变化是如此小的变化,只有一个字符,但花了很长时间才找到这个变化。事实证明,有问题的声明实际上是以下情况:

preg_replace('/\s+/', ' ',$columnvalue)) 

这个正则表达式的目的是从价值删除空白,但因为编码为UTF-8regular expression有破坏à的剩余效应字符。我解决了这个问题,但在正则表达式定义的末尾添加了uunicode modifier)。所以表达式变成:

preg_replace('/\s+/u', ' ',$columnvalue)) 

然后页面的编码是正确的。