我正在使用此每日数据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é这样的名字去除这个字母的重音。
也许正则表达式是解决方案?
答案 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);