-1

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

我要删除的值如下所示:�</p>

我只想删除这个。相关技术是PHP。

建议表示赞赏。

4

8 回答 8

6

这是一个编码问题;你不应该试图清理那些虚假的字符,但要明白为什么你会收到乱码。

尝试以 Unicode 格式获取您的数据,或者与您的提要提供商达成协议,让您使用相同的编码。

于 2009-10-06T14:30:16.577 回答
1

谢谢你们的回应。不幸的是,提交的人有以下问题:

错误的原因很明显:

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

这:

s/[\u00FF-\uFFFF]//

当我转换为 preg 时,它也使用了已弃用的 ereg 形式的正则表达式也不起作用,因为范围对于正则表达式来说太大而无法处理。此外,该范围内还有一些洞可以让垃圾渗入。

这个建议:

这是一个编码问题;你不应该试图清理那些虚假的字符,但要明白为什么你会收到乱码。

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

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

这似乎暂时有效。解决方法如下:

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

如果有人有更好的想法,我仍然很想听听他们的意见。干杯。

于 2009-10-06T15:58:39.473 回答
0

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

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

filter_input(input_type, variable, filter, options) 

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

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

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

PHP 站点在此处提供有关选项的更多信息:验证过滤器

于 2009-10-06T14:23:03.283 回答
0

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

s/[\u00FF-\uFFFF]//

这将删除字符 255 以上的任何内容。

于 2009-10-06T14:23:49.897 回答
0

这对你来说很难做到,因为你对过滤什么和保留什么没有一个明确的定义。通常,显示为空方块的字符是您使用的字体没有字形的任何字符,因此“显示为:�”的定义非常不准确。

最好确定哪些字符有效的(无论如何这始终是一个好方法,可以进行任何类型的数据清理)并丢弃不属于其中的所有字符。PHP过滤器功能是执行此操作的一种可能性,具体取决于您所需的复杂程度和稳健性。

于 2009-10-06T14:25:51.563 回答
0

查看这个问题以获取字符串中每个字节的值。(这假设多字节重载已关闭。)

一旦有了字节,就可以使用它们来确定这些“垃圾”字符实际上是什么。它们可能是由于误解了字符串的编码,或以错误的字体显示或其他原因造成的。将它们发布在这里,人们可以进一步帮助您。

于 2009-10-06T16:06:36.350 回答
0

试试这个:

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

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

于 2009-10-06T23:04:16.433 回答
-1

你好朋友,

     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)

于 2012-04-24T12:41:19.453 回答