【发布时间】:2015-08-19 04:56:57
【问题描述】:
我有一个使用 CKEditor 生成 HTML 的 textarea。我想确保用户输入的所有链接都有他们的target="_blank"。我想我需要做两次正则表达式检查:一次将任何target="..." 替换为target="_blank",另一次仅在目标属性不存在的地方插入目标属性。我没有取得太大进展:
// where target attribute doesn't exist, add it
preg_replace("/<a(\s*(?!target)([\w\-])+=([\\"\'])[^\\"\']+\3)*\s*\/?>/", "<a target="_blank"$1>", $input_lines);
这适用于这种简单的情况:
<a href="#">one</a> ---> <a target="_blank" href="#">one</a>
它不适用于<a href="#" alt="hello">one</a>,我不知道为什么,但我通常不会用正则表达式做这种具有挑战性的事情。
另外,我如何将现有的target="..."(例如target="_parent")替换为严格的target="_blank"?
【问题讨论】:
-
一个 HTML/XML 解析器可能会更好,php.net/manual/en/refs.xml.php。
-
我将把它贴在这里,以获得 Stack Overflow 上有史以来最好的答案之一:stackoverflow.com/questions/1732348/…
标签: php regex html-parsing