gpt4 book ai didi

php - 确保所有链接都具有目标 ="_blank"的正则表达式

转载 作者:搜寻专家 更新时间:2023-10-31 21:07:05 32 4
gpt4 key购买 nike

我有一个使用 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="..." (例如 target="_parent ")严格使用 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 demo

输出:

<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>

关于php - 确保所有链接都具有目标 ="_blank"的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30646237/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com