mysql - 我将使用什么从大量数据中删除转义的 html

标签 mysql perl

我们的数据库中充满了从 RSS 提要中检索到的文章。我不确定我会得到什么数据,以及已经设置了多少过滤(使用 SimplePie 库的 WP-O-Matic Wordpress 插件)。这个插件在插入之前使用 Wordpress 内置的插入后功能进行一些基本编码,该功能也进行一些过滤。在 RSS 提要的编码、使用 PHP 的插件编码、Wordpress 的编码和 SQL 转义之间,我不确定从哪里开始。

数据通常在我要保留的内容之后的字段末尾。所有内容都在一行中,但为了便于阅读而分开:

<img src="http://feeds.feedburner.com/~ff/SoundOnTheSound?i=xFxEpT2Add0:xFbIkwGc-fk:V_sGLiPBpWU" border="0"></img>

<img src="http://feeds.feedburner.com/~ff/SoundOnTheSound?d=qj6IDK7rITs" border="0"></img>

&lt;img src=&quot;http://feeds.feedburner.com/~ff/SoundOnTheSound?i=xFxEpT2Add0:xFbIkwGc-fk:D7DqB2pKExk&quot;

注意一些图像是如何转义的,而另一些则不是。我认为这与最后一部分被截断有关,以便无法识别为 html 标记,然后导致它被 html 编码,而实际的 img 标记被单独留下。

另一条记录在其中一个字段中只有这个,这意味着 RSS 提要没有给我任何关于该项目的信息(现在过滤掉了,但我有一堆这样的记录):

&lt;img src=&quot;http://farm3.static.flickr.com/2183/2289902369_1d95bcdb85.jpg&quot; alt=&quot;post_img&quot; width=&quot;80&quot;

所有提取的样本都在一行上,但为了便于阅读而分开了。否则,它们会从命令行 mysql 客户端的数据库中完全复制。

问题:处理上述转义 html(或 html 标记的一部分)的最佳方法是什么,以便我可以删除它而不影响内容?

我想去掉它,因为字段末尾的图片通常是与内容无关的图片。在 feedburner 的情况下,feedburner 将这些添加到提要中的每篇文章中。其他时候,它们是围绕损坏图像的损坏链接。重点不是可以轻松删除的有效 html img 标签。这是损坏的标签,如果未编码将不是有效的 html,您的标准 html 解析器将无法解析这些标签。

[编辑] 如果只是提取我​​想要的 html 并执行 strip_tags 的问题并重新插入数据,我不会问这个问题。

我有问题的部分是,以前的 img 标签是 html 编码的,结尾被截断了。如果它被反编码,它将不是是一个 html 标签,所以我不能以通常的方式解析它。

与所有 &lt;img src=&quot;废话,除了 SELECT ID, post_content FROM table WHERE post_content LIKE '&lt;img' 之外,我无法找到它。这至少让我得到了那些职位。但是,当我获得数据时,我需要一种方法来找到它、删除它,但保留其余内容。

[/编辑]

[编辑 2]

<img src="http://farm4.static.flickr.com/3162/2735565872_b8a4e4bd17.jpg" alt="post_img" width="80" />Through the first two months of the year, the volume of cargo handled at Port of Portland terminals has increased 46 percent as the port?s marine cargo business shows signs of recovering from a dismal 2009.<div> <a href="http://feeds.bizjournals.com/~ff/bizj_portland?a=YIs66yw13JE:_zirAnH6dt8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/bizj_portland?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.bizjournals.com/~ff/bizj_portland?a=YIs66yw13JE:_zirAnH6dt8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/bizj_portland?i=YIs66yw13JE:_zirAnH6dt8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.bizjournals.com/~ff/bizj_portland?a=YIs66yw13JE:_zirAnH6dt8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/bizj_portland?i=YIs66yw13JE:_zirAnH6dt8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.bizjournals.com/~ff/bizj_portland?a=YIs66yw13JE:_zirAnH6dt8:qj6IDK7rITs">&lt;img src=&quot;http://feeds.feedburner.com/~ff/bizj_portland?d=qj6IDK7rITs&quot;

我想保留的部分:

<img src="http://farm4.static.flickr.com/3162/2735565872_b8a4e4bd17.jpg" alt="post_img" width="80" />Through the first two months of the year, the volume of cargo handled at Port of Portland terminals has increased 46 percent as the port?s marine cargo business shows signs of recovering from a dismal 2009.

重申一下:这与删除有效的 html img 标签无关。这很容易。我需要能够具体找到 &lt;img src=&quot;http://feeds.feedburner.com/~ff/bizj_portland?d=qj6IDK7rITs&quot;如果它是 img 标签 img 标签损坏的 img 标签或 anchor img anchor img img 损坏图像等模式的一部分,但删除&lt;img如果它确实是文章的一部分。在我审查过的几十个样本中,这个损坏的 img 标签一直都在字段的末尾。

另一个是单个损坏的图像标签。它始终是一个损坏的 flickr img 标签,但如上所述,我不能只搜索 &lt;img。因为它可能是内容的有效部分。

问题在于我不能简单地将它解码并将其解析为 HTML,因为它不是有效的 html。 [/编辑 2]

最佳答案

最好的方法是:

  1. 安装 HTML::Entities来自 CPAN 并使用它来对 URI 进行转义。
  2. 安装 HTML::Parser从 CPAN 中提取并使用它来解析和删除未转义后的 URI。

正则表达式不是完成此任务的合适工具。

关于mysql - 我将使用什么从大量数据中删除转义的 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2631608/

相关文章:

php - 从 MySQL 查询构建数组以格式化 json

php - 每周逐页计数,然后创建新的表条目

linux - 在 Perl 程序中访问 shell 变量

mysql - 需要获取公共(public)列条目的第一行,但排除具有特定列值的行

php - 如何通过 php 为更新、插入、删除的 WHERE 子句选择 mysql 行 ID?

c# - COM 接口(interface)中函数返回中的 Guid 对象

Perl & MongoDB 二进制数据

Perl:使用哈希值通过引用调用子例程的问题

perl - 为什么在使用 Net::Cassandra::Easy 和 Cassandra 0.5x 插入行时出现错误?

mysql - 如何在SQL中查找单元格的重复单词