如何从PHP中的HTML标签的属性中删除标签?

时间:2012-01-23 18:41:12

标签: php html regex preg-replace

我有大量使用旧CMS生成的帖子。它是HTML标记......几乎......我以前见过的更糟糕的事情。它包含这样的结构:

....<IMG alt="Хит сезона - <b>Лучшие фразы...</b>" src="http://www.example.com/articles/pic.jpg" align=left>...

正如您所看到的那样,严格来说它不是HTML,因为它包含标签属性中的tegs。

我需要从HTML属性中删除任何代码。

我曾试图通过DOMDocument使用解析,但它cannot output cyrilic symbols correctly if headers body and html are not in parsed string。即使它确实如此,我也必须从输出中删除它们。

问题是如何从PHP中的HTML标签属性中删除标签?

preg_replace是否适用于此?

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

preg_replace('#<([^ ]+)((\s+[\w]+=((["\'])[^\5]+\5|[^ ]+))+)>#e', '"<\\1" . str_replace("\\\'", "\'", strip_tags("\\2")) . ">"', $code);

它需要每个html开始标记(<something>),匹配所有属性name="value" name='value' name=value然后标记剥离它们。 str_replace是必要的,因为添加e修饰符时,PHP会在评估之前对每个匹配使用addslashes

我测试了它似乎工作正常。 :)