正则表达式以确保所有链接都具有target =“

编程入门 行业动态 更新时间:2024-10-25 10:25:20
正则表达式以确保所有链接都具有target =“_ blank”(Regular expression to ensure all links have target=“_blank”)

我有一个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

本文发布于:2023-08-04 20:32:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1421990.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:链接   以确保   正则表达式   target

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!