除了打印字符外,我如何在PHP中删除所有内容?

时间:2012-11-08 19:24:14

标签: php regex

我正在使用此每日数据Feed。令我惊讶的是,一个字段在MySQL之后看起来并不正常。 (我无法控制谁提供Feed。)

所以我做了一个mysqldump并发现了邮政编码,这个记录的城市包含了一个非打印字符。它在'vi'中显示为: < 200E>

我正在使用PHP,我解析这些数据并将其放入MySQL数据库。我已经使用了修剪功能,但这并没有摆脱它。问题是,如果你对MySQL数据库中的邮政编码进行查询,它就找不到带有非打印字符的记录。

我希望在将它放入MySQL数据库之前清理它。

我可以在PHP中做什么?起初我认为正则表达式只允许a-z,A-Z和0-9,但这对地址不好。地址使用句号,逗号,连字符以及我目前没想到的其他内容。

最好的方法是什么?我不知道除了打印字符之外还应该允许什么来定义它。还有另一个像trim一样的PHP函数来完成这项工作吗?还是正则表达?如果是这样,我想举个例子。谢谢!

我已经研究过使用PHP函数,并在PHP.NET上发布了这个:

<?php
$a = "\tcafé\n";
//This will remove the tab and the line break
echo filter_var($a, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
//This will remove the é.
echo filter_var($a, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
?>

虽然使用FILTER_FLAG_STRIP_HIGH确实剥离了&lt; 200e&gt;我在'vi'中提到过,我担心它会以André这样的名字去除这个字母的重音。

也许正则表达式是解决方案?

4 个答案:

答案 0 :(得分:4)

您可以使用PHP过滤器:http://www.php.net/manual/en/function.filter-var.php

我建议您使用FILTER_SANITIZE_STRING过滤器,或任何符合您需要的过滤器。

答案 1 :(得分:2)

我认为你可以使用这个小正则表达式代替:

preg_replace( '/[^[:print:]]+/', '', $your_value);

它基本上删除了$ your_value

中的所有非打印字符

答案 2 :(得分:1)

我试过了:

<?php
$string = "\tabcde éç ÉäÄéöÖüÜß.,!-\n";
$string = preg_replace('/[^a-z0-9\!\.\, \-éâëïüÿçêîôûéäöüß]/iu', '', $string);
print "[$string]";

它给了:

[abcde éç ÉäÄéöÖüÜß.,!-]

将所有特殊字符添加到正则表达式中。

答案 3 :(得分:0)

如果您使用英语工作且不需要支持unicode字符,那么只允许[\x20-\x7E]

...并删除所有其他人:

$s = preg_replace('/[^\x20-\x7E]+/', '', $s);
相关问题