我有一个使用CKEditor生成HTML的textarea。我想确保用户输入的所有链接都有他们的target="_blank"
。我认为我需要做两个正则表达式检查:一个替换任何target="..."
到target="_blank"
,另一个插入目标属性,其中目标属性不存在。我不是做多大进展:正则表达式,以确保所有链接都有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解析器可能会更好,http://php.net/manual/en/refs.xml.php。 – chris85
我只是想坚持下去,在堆栈溢出所有时间的最佳答案之一:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained标签都有效/ 1732454#1732454 – CD001