我有大量使用旧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是否适用于此?
答案 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
。
我测试了它似乎工作正常。 :)