'æøå'上的preg_replace没有按预期工作

时间:2014-03-22 10:57:16

标签: php regex preg-replace

我需要在导入数据之前解析CSV文件。我想排除所有不需要的字符,但无法在æøå中使preg_replace工作

删除所有不需要的字符,包括æøåÆØÅ

输入文件字符集:ISO 8859-1 PHP文件字符集:UTF-8

输入

"EI25";"EU køb";"16640";"25";"100";"NET";"16630"

代码

$contents = file_get_contents('./vatcode.csv');
$contents = preg_replace("/[^A-ZÆØÅa-zæøå0-9_\s\"';,\/\.\+\-\\\\]/", '', $contents);

输出

"EI25";"EU kb";"16640";"25";"100";"NET";"16630"

3 个答案:

答案 0 :(得分:1)

这将删除除SPACE TO DEL之外的所有特殊字符 请参阅此表ascii table

$contents = file_get_contents('./vatcode.csv');
$contents = preg_replace('/[^(\x20-\x7F)]*/','', $contents);
echo($output);

答案 1 :(得分:1)

为了避免这种编码问题,您可以逐个使用\p{Latin}而不是硬编码字母:

$contents = preg_replace('~[^\p{Latin}0-9_\s"\';,\\\/.+-]+~u', '', $contents);

也许其中一个类也可以提供帮助(来自PCRE documentation):

P     Punctuation
Pc    Connector punctuation
Pd    Dash punctuation
Pe    Close punctuation
Pf    Final punctuation
Pi    Initial punctuation
Po    Other punctuation
Ps    Open punctuation

答案 2 :(得分:0)

发现这是因为PHP文件是用UTF-8

编码的