0

我需要对看起来像这样的字符串进行一些清理:

$author_name = '<a href="http://en.wikipedia.org/wiki/Robert_Jones_Burdette>Robert Jones Burdette </a>';

请注意,href 标记没有右引号——我在其中的一个大表上使用 DOMParser 来提取文本,这很糟糕。

我想看看 $author_name 中的字符串;

如果第一个 > 前面没有 ",则将其替换为 "> 以正确关闭标签。如果没问题,请跳过并执行下一步。确保根本不替换第二个 >。

使用 php 正则表达式,我无法找到一个可行的解决方案 - 我可以将整个事情切碎并检查它的部分,但这会很慢,我认为必须有一个正则表达式可以做我想要的。

TIA

4

2 回答 2

1

您可以做的是,找到第一个结束标记,带或不带双引号 ("),并将其替换为 (">):

$author_name = preg_replace('/(.+?)"?>(.+?)/', '$1">$2', $author_name);
于 2013-02-15T02:02:52.850 回答
0

http://www.barattalo.it/html-fixer/

下载它,然后将其包含在您的 php.ini 文件中。其余的很容易:

$dirty_html = ".....bad html here......";

$a = new HtmlFixer();
$clean_html = $a->getFixedHtml($dirty_html);

人们想要使用正则表达式是很常见的,但你必须记住HTML 不是正则的。

于 2013-02-15T01:51:54.123 回答