从PHP字符串中删除字符

时间:2009-10-06 14:16:59

标签: php html filter data-scrubbing

我正在接受来自Feed的字符串,以便在屏幕上显示,可能包含或可能不包含我要过滤掉的垃圾。我根本不想过滤普通符号。

我要删除的值如下所示:

只有这样才能删除。相关技术是PHP。

建议表示赞赏。

8 个答案:

答案 0 :(得分:6)

这是编码问题;你不应该试图清理那些虚假的角色,但要明白你为什么要把它们弄得乱糟糟。

尝试将您的数据作为Unicode,或与您的Feed提供商达成协议,使用相同的编码。

答案 1 :(得分:1)

感谢您的回复,伙计们。不幸的是,提交的内容存在以下问题:

错误的原因很明显:

ereg_replace("[^A-Za-z0-9]", "", $string);

此:

s/[\u00FF-\uFFFF]//
当我转换为preg时,

也使用了不推荐使用的正则表达式的正则表达式也没有用,因为范围对于正则表达式来说太大了。此外,该范围内还有一些漏洞可以让垃圾渗透。

这个建议:

  

这是编码问题;你不应该试图清理那些虚假的角色,但要明白你为什么要把它们弄得乱糟糟。

虽然有效,但并不好,因为我无法控制我收到的数据是如何编码的。它来自外部来源。有时那里有垃圾,有时却没有。

所以,我提出的解决方案相对较脏,但在没有更强大的东西的情况下,我只是接受所有标准字母,数字和符号,并丢弃其余部分。

这似乎现在有效。解决方案如下:

$fixT = str_replace("£", "£", $string); 
$fixT = str_replace("€", "€", $fixT);
$fixT = preg_replace("/[^a-zA-Z0-9\s\.\/:!\[\]\*\+\-\|\<\>@#\$%\^&\(\)_=\';,'\?\\\{\}`~\"]/", "", $fixT);

如果有人有任何更好的想法,我仍然希望听到他们的意见。欢呼声。

答案 2 :(得分:0)

如果您无法解决Feed中的数据问题并需要过滤信息,那么这可能有所帮助:

PHP5 filter_input非常适合过滤输入字符串并允许相当多的rlexability

filter_input(input_type, variable, filter, options) 

如果需要相同的过滤,您还可以在一行中过滤所有表单数据:)

这里有一些很好的例子和更多信息:

http://www.w3schools.com/PHP/func_filter_input.asp

PHP网站提供了有关选项的更多信息:Validation Filters

答案 3 :(得分:0)

您正在寻找字体可以显示的字形范围之外的字符。您可以找到字体可以显示的最大unicode值,然后创建一个正则表达式,用空字符串替换该值以上的任何值。一个例子是

s/[\u00FF-\uFFFF]//

这将剥离字符255之外的任何内容。

答案 4 :(得分:0)

这对你来说很难做到,因为你没有对过滤内容和保留内容的可靠定义。通常情况下,显示为空方块的字符是您正在使用的字体没有字形的任何字符,因此“显示如下的字符: ”的定义非常不精确。

最好确定哪些字符 有效(无论如何,这总是一个好的方法,任何类型的数据清理)并丢弃所有不是其中之一的内容。 PHP [{3}}函数是执行此操作的一种可能性,具体取决于您所需的复杂程度和健壮性。

答案 5 :(得分:0)

查看this question以获取字符串中每个字节的值。 (这假设multibyte overloading已关闭。)

获得字节后,您可以使用它们来确定这些“垃圾”字符究竟是什么。它们可能是错误解释字符串编码或以错误字体或其他形式显示字符串的结果。将它们发布在这里,人们可以帮助您。

答案 6 :(得分:0)

试试这个:

  • 手动从Feed中下载样本。
  • Notepad++或其他高级文本编辑器中打开它(Linux上的KATE对此有利)。
  • 尝试更改编码并从一种编码转换为另一种编码。

如果您找到一个可以正确显示字符的设置,那么您需要使用该编码对网站进行编码,或者将其从该编码转换为您在网站上使用的任何内容。

答案 7 :(得分:-1)

Hello Friends,

     try this Regular Expression to remove unicode char from the string : 

     /*\\u([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])/ 

谢谢, Chintu(prajapati.chintu.001@gmail.com)