我有一个textarea使用CKEditor生成HTML。 我想确保用户输入的所有链接都具有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="_blank ”替换现有的target="..." (例如target="_parent ”)?
I have a textarea which uses CKEditor to generate HTML. I want to ensure that all links the user enters have their target="_blank". I thought I'd need to do two regex checks: one to replace any target="..." to target="_blank", and another to just insert target attribute where target attribute doesn't exist. I'm not making much progress:
// where target attribute doesn't exist, add it preg_replace("/<a(\s*(?!target)([\w\-])+=([\\"\'])[^\\"\']+\3)*\s*\/?>/", "<a target="_blank"$1>", $input_lines);This works in this simple case:
<a href="#">one</a> ---> <a target="_blank" href="#">one</a>It does not work for <a href="#" alt="hello">one</a>, I'm not sure why but then I don't normally do things this challenging with regular expressions.
Also, how would I replace existing target="..." (e.g. target="_parent") with strictly target="_blank"?
最满意答案
您可以安全地使用带有XPATH的PHP DOM来设置属性或修改所有<a>标签中的现有属性,如下所示:
$html = <<<DATA <a href="somelink.html" target="_blank"><img src="myimage.jpg" alt="alt" title="sometitle" /></a> <a href="somelink1.php" target="_parent">link_no1</a> <a href="somelink2.php">link_no2</a> <a href="someimage.jpg"><img src="image2.png"></a> DATA; $dom = new DOMDocument('1.0', 'UTF-8'); $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); $xpath = new DOMXPath($dom); $links = $xpath->query('//a'); foreach($links as $link) { $link->setAttribute('target', '_blank'); } echo $dom->saveHTML();请参阅IDEONE演示
输出:
<a href="somelink.html" target="_blank"><img src="myimage.jpg" alt="alt" title="sometitle"><a href="somelink1.php" target="_blank">link_no1</a><a href="somelink2.php" target="_blank">link_no2</a><a href="someimage.jpg" target="_blank"><img src="image2.png"></a></a>You can safely use PHP DOM with XPATH to set attributes or modify existing ones in all <a> tags like this:
$html = <<<DATA <a href="somelink.html" target="_blank"><img src="myimage.jpg" alt="alt" title="sometitle" /></a> <a href="somelink1.php" target="_parent">link_no1</a> <a href="somelink2.php">link_no2</a> <a href="someimage.jpg"><img src="image2.png"></a> DATA; $dom = new DOMDocument('1.0', 'UTF-8'); $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); $xpath = new DOMXPath($dom); $links = $xpath->query('//a'); foreach($links as $link) { $link->setAttribute('target', '_blank'); } echo $dom->saveHTML();See IDEONE demo
Output:
<a href="somelink.html" target="_blank"><img src="myimage.jpg" alt="alt" title="sometitle"><a href="somelink1.php" target="_blank">link_no1</a><a href="somelink2.php" target="_blank">link_no2</a><a href="someimage.jpg" target="_blank"><img src="image2.png"></a></a>更多推荐
target,_blank,<a,a>,电脑培训,计算机培训,IT培训"/> <meta name="des
发布评论