什么';是否有一个PHP正则表达式以特定URL为目标?

什么';是否有一个PHP正则表达式以特定URL为目标?,php,html,regex,str-replace,Php,Html,Regex,Str Replace,我有一些基本的HTML,我正在调用str\u replace(),我需要在HTML字符串中找到的所有URL后面附加一个“generate\u book.php?link=”,但我需要排除任何外部链接,例如 --这应该变成-- ——这件事不必管 感谢你的大脑 试试看: $str = preg_replace( "(href=\"([^\"]+)\")ie", "if(substr('$1',0,7) == 'http://') return stripslashes

我有一些基本的HTML,我正在调用
str\u replace()
,我需要在HTML字符串中找到的所有URL后面附加一个“
generate\u book.php?link=
”,但我需要排除任何外部链接,例如

--这应该变成--

——这件事不必管

感谢你的大脑

试试看:

$str = preg_replace(
    "(href=\"([^\"]+)\")ie",
    "if(substr('$1',0,7) == 'http://')
        return stripslashes('$1');
     else
        return 'generate_book.php?link='.urlencode(stripslashes('$1'));",
    $str);
尝试一下:

$str = preg_replace(
    "(href=\"([^\"]+)\")ie",
    "if(substr('$1',0,7) == 'http://')
        return stripslashes('$1');
     else
        return 'generate_book.php?link='.urlencode(stripslashes('$1'));",
    $str);

您需要在开始时使用前瞻,以确保它与HTTP或HTTPS不匹配。如果您对此感到担忧,还可以添加
mailto

$str = preg_replace("/(?<=href=\")(?!http:\/\/|https:\/\/)([^\"]+)/i", "generate_book.php?link=$1", $str);

$str=preg\u replace(“/(?您需要在开始时使用前瞻,以确保它与HTTP或HTTPS不匹配。如果您担心它,您还可以添加
mailto

$str = preg_replace("/(?<=href=\")(?!http:\/\/|https:\/\/)([^\"]+)/i", "generate_book.php?link=$1", $str);

$str=preg\u replace(“/”?我很确定你不能只是将函数作为字符串传递到那里。你想要的是
preg\u replace\u callback()
create\u function()
(如果使用>5.3,则使用匿名函数).e
修饰符使
replace
参数被评估为PHP代码抱歉是n00b,@alex你能给我一个你的意思的示例代码吗?我想我明白了,但我也是一个完全的新手:)@Kolink Oh忽略了这一点。我一直避免使用它,因为它对我来说总是像一个安全问题。如果您将正则表达式从
[^\“]更改为
要检查有效的URL字符,就不会有安全风险,因为这些字符是无害的——而且它是以字符串形式转义的。我很确定你不能只将函数作为字符串传递到那里。你需要的是
preg\u replace\u callback()
create\u function()
(如果使用>5.3,则使用匿名函数).e
修饰符使
replace
参数被评估为PHP代码抱歉是n00b,@alex你能给我一个你的意思的示例代码吗?我想我明白了,但我也是一个完全的新手:)@Kolink Oh忽略了这一点。我一直避免使用它,因为它对我来说总是像一个安全问题。如果您将正则表达式从
[^\“]更改为
要检查有效的URL字符,就不会有安全风险,因为这些字符是无害的,而且还是以字符串形式转义的。好的,我尝试了此页面上的所有建议,但都产生了错误。您的建议似乎产生的错误最少:警告:preg_replace()[function.preg replace]:C:\wamp\www\projects\kineo\taxteam[CD\U课程]GCSB(中心)中的未知修饰符“/”\第64Oops行的htdocs\book\generate\u book.php,将http/https后的
/
替换为
\/\/
,我没有使用php测试正则表达式,所以我不必逃避它们。这对我来说非常有效,谢谢,我不想用我使用它的上下文吓跑任何人,但这是为了一个烧成CDROM的Server2Go包所以这里没有什么危险,只是断开了链接:)好的,我尝试了这个页面上的所有建议,但都产生了错误。你的建议似乎产生的错误最少:警告:preg_replace()[function.preg replace]:C:\wamp\www\projects\kineo\taxteam[CD_COURSE]GCSB(Central)中的未知修饰符“/”\第64Oops行的htdocs\book\generate\u book.php,将http/https后的
/
替换为
\/\/
,我没有使用php测试正则表达式,所以我不必逃避它们。这对我来说非常有效,谢谢,我不想用我使用它的上下文吓跑任何人,但这是为了一个烧成CDROM的Server2Go包所以这里几乎没有什么危险,只是断开了链接:)