我正在尝试找出一种匹配3种不同网址类型的方法,它们是;
http://(www.)domain.com
或 www.domain.com
http://(www.)domain.com/image.jpg/.png/gif
或 www.domain.com/image.jpg/.png/.gif
http://(www.)youtube.com/watch?v=Li1zXaEYol8
或 www.youtube.com/watch?v=Li1zXaEYol8
注意,我不希望它们被解析,如果它们只是没有http或www。
的domain.com我面临的问题是让所有三个 - 甚至两个一起工作, 我有一个自动链接的类,所以如果有一些http://或www。它将链接它,但是如果我放入一个图像,它会解析图像中URL的HTML,如:
<img src="<a href="www.domain.com">domain.com</a>" />
这是垃圾:(
我还要扫描YouTube网址,然后将网址替换为嵌入代码,以便显示视频而不是网址。我提到了从URL中提取ID,但无法让替换工作。
请注意,这正在处理textarea,例如评论字段,人们正在输入评论,以及为什么自动链接网址,解析图像和YouTube视频的HTML。
数据通过SQL查询显示并回显$ comments ['message'],并使用一些str_replace内容来进行一些简单的格式化。
任何帮助都将不胜感激。
答案 0 :(得分:1)
你走了:
(?:http:\/\/www\.|http:\/\/|www\.)(?:youtube\.com\/watch\?v=(?:\w+)|domain\.com\/image.(?:jpg|png|gif)|domain\.com)
或者使用分隔符:
~(?:http:\/\/www\.|http:\/\/|www\.)(?:youtube\.com\/watch\?v=(?:\w+)|domain\.com\/image.(?:jpg|png|gif)|domain\.com)~i
您可test the above RegExs @ Robular。
要确定网址是否在不受欢迎的HTML标记内,我建议您使用DOM解析器。
另外,请查看以下相关问题: How to mimic StackOverflow Auto-Link Behavior 。
关于YouTube替代品,您可以执行以下操作:
echo preg_replace('~youtube\.com\/watch\?v=(\w+)~i', 'embed code $1', $comments['message']);