我有一些我打电话给str_replace()
的基本HTML,我需要在HTML字符串中添加“generate_book.php?link=
”附加的所有网址,但我需要排除任何外部链接,例如;
<a href="gst/3.html">Link</a>
- 这应该变成 - <a href="generate_book.php?link=gst/3.html"></a>
<a href="http://example.com">Link</a>
- 这应该保持不变
你的大脑很受欢迎!
答案 0 :(得分:1)
您希望在开头使用预测,以确保它与HTTP或HTTPS不匹配。如果您担心,也可以添加mailto
。
$str = preg_replace("/(?<=href=\")(?!http:\/\/|https:\/\/)([^\"]+)/i", "generate_book.php?link=$1", $str);
此正则表达式还使用了后视((?<=href=\")
),因此它实际上与href="
不匹配。
警告:
link
标记之类的某些标记也具有href
属性。确保你没有更换这些。如果您只需要使用正则表达式匹配A
个代码,那么您的正则表达式复杂性将会大幅提升并仍然won't really be safe. 答案 1 :(得分:0)
尝试一下:
$str = preg_replace(
"(href=\"([^\"]+)\")ie",
"if(substr('$1',0,7) == 'http://')
return stripslashes('$1');
else
return 'generate_book.php?link='.urlencode(stripslashes('$1'));",
$str);