使用 preg_replace 替换 URL 但不替换图片。

4
$title =  $_POST['title'];

$post = stripslashes($_POST['TextArea']);

$link = preg_replace('"(http://www\S+)"','<a href="$1">$1</a>', $post);

echo $link;

提交表单后,上述脚本将替换文本区域内的所有链接,而图像的结果将被破坏。
有没有一种方法可以替换链接但不是图像?
尽管url可以正常工作,但在浏览器中图像的结果是...
<img src="<a href="http://...myimage.jpg"">http://.../myimage.jpg"</a> height="150" width="150">

enter image description here enter image description here

Thank you


4
我们可以看到一个输入文本和您期望的输出文本的示例吗?请提供一个输入文本和您期望得到的输出文本的示例,我将为您进行翻译。 - Explosion Pills
DOMDocument 对 Joseph 没有任何影响。他只是试图将非 HTML 链接转换为 HTML 链接。 - Marcus Recck
1
使用负断言来排除任何http类型文本之前的src =“,这将排除<img标签。 - Marc B
2个回答

4
preg_replace('"(?<!src=[\"\'])(http://www\S+)"','<a href="$1">$1</a>', $text)

这将仅转换未经过src="src='前缀的http://www链接。

@user2026955 不要忘记给帮助你的答案点赞/接受。同时请注意,没有"'src=将无法正常工作。 - Explosion Pills
当然,再次感谢您!当我发布最终脚本时,我会提到您的帮助,祝您有美好的一天 :) - Mary.G

0
preg_replace('/(?<!src=[\"\'])(http(s)?:\/\/(www\.)?[\/a-zA-Z0-9%\?\.\-]*)(?=$|<|\s)/','<a href="$1">$1</a>', $text);

这是正确的方法,因为之前的解决方案在必要时没有完成url


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接