Php 用于将文本链接转换为<;a href="&引用&燃气轮机;标记在特定用例中中断

Php 用于将文本链接转换为<;a href="&引用&燃气轮机;标记在特定用例中中断,php,regex,Php,Regex,我有这个正则表达式代码: $hike_description = nl2br($hike_description); //$hike_description = str_replace(array('\n','\r'),'',$hike_description); //Convert all urls to links $hike_description = preg_replace('#([\s|^])(www)#i', '$1http://$2', $hike_description);

我有这个正则表达式代码:

$hike_description = nl2br($hike_description);
//$hike_description = str_replace(array('\n','\r'),'',$hike_description);

//Convert all urls to links
$hike_description = preg_replace('#([\s|^])(www)#i', '$1http://$2', $hike_description);
$pattern = '#((http|https|ftp|telnet|news|gopher|file|wais):\/\/[^\s]+)#i';
$replacement = '<a href="$1" target="_blank">$1</a>';
$hike_description = preg_replace($pattern, $replacement, $hike_description);
$hike\u description=nl2br($hike\u description);
//$hike\u description=str\u replace(数组('\n','\r'),'$hike\u description);
//将所有URL转换为链接
$hike|u description=preg|u replace(“#”([\s| ^])(www)#i',“$1http://$2',$hike|u description”);
$pattern='#(http | https | ftp | telnet | news | gopher | file | wais):\/\/[^\s]+)#;
$replacement='';
$hike\u description=preg\u replace($pattern,$replacement,$hike\u description);
到目前为止,它一直在100%的时间里工作

在这个页面中,代码第一次不起作用。具体来说,它没有在链接的末尾放置“标记”,因此链接一直向下延伸到页面的其余部分:

<a href="http://maps.google.com/maps?um=1&ie=UTF-8&q=little+river+canyon+center&fb=1&gl=us&hq=little+river+canyon+center&hnear=0x888a614b2e7272e5%3A0x913a5fafeec714d6%2CCentre%2C+AL&ei=GBsFTtedF8vUgAfex6zNAQ&sa=X&oi=local_group&ct=image&ved=0CAQQtgM<br" target="_blank">http://maps.google.com/maps?um=1&ie=UTF-8&q=little+river+canyon+center&fb=1&gl=us&hq=little+river+canyon+center&hnear=0x888a614b2e7272e5%3A0x913a5fafeec714d6%2CCentre%2C+AL&ei=GBsFTtedF8vUgAfex6zNAQ&sa=X&oi=local_group&ct=image&ved=0CAQQtgM<br</a> />

您看到页面中间的链接一直延伸到底部,并且没有关闭吗

有什么线索可以解释为什么这一次可能发生而不是其他时间

谢谢

ps-这是最终出现在页面上的HTML:

<a href="http://maps.google.com/maps?um=1&ie=UTF-8&q=little+river+canyon+center&fb=1&gl=us&hq=little+river+canyon+center&hnear=0x888a614b2e7272e5%3A0x913a5fafeec714d6%2CCentre%2C+AL&ei=GBsFTtedF8vUgAfex6zNAQ&sa=X&oi=local_group&ct=image&ved=0CAQQtgM<br" target="_blank">http://maps.google.com/maps?um=1&ie=UTF-8&q=little+river+canyon+center&fb=1&gl=us&hq=little+river+canyon+center&hnear=0x888a614b2e7272e5%3A0x913a5fafeec714d6%2CCentre%2C+AL&ei=GBsFTtedF8vUgAfex6zNAQ&sa=X&oi=local_group&ct=image&ved=0CAQQtgM<br</a> />
http://maps.google.com/maps?um=1&ie=UTF-8&q=little+river+canyon+center&fb=1&gl=us&hq=little+river+canyon+center&hnear=0x888A614B2E72E5%3A0x913a5fafeec714d6%2Center%2C+AL&ei=GBSFTEDF8Vugafex6ZNAQ&sa=X&oi=local\U group&ct=image&ved=0AQQTGM

正则表达式希望URL包含所有字符,直到下一个空格字符。紧跟在URL后面的是html

标记,正则表达式看到的下一个空格是该标记中
/>
之前的空格。因此它认为URL还包含正则表达式期望的
URL包含所有字符直到下一个空格字符。紧接着URL后面是一个html

标记,您的正则表达式看到的下一个空格是该标记中
/>
之前的空格。因此,它认为URL还包含链接以
结尾的
链接以
结尾的
尝试更改y我们的模式是:

$pattern = '#((http|https|ftp|telnet|news|gopher|file|wais):\/\/[^\s<.]+)#i';

$pattern='(http | https | ftp | telnet | news | gopher | file | wais):\/\/[^\s尝试将模式更改为:

$pattern = '#((http|https|ftp|telnet|news|gopher|file|wais):\/\/[^\s<.]+)#i';


$pattern='#((http | https | ftp | telnet | news | gopher | file | wais):\/\/[^\s@Michael我刚刚在regext中添加了<字符,但效果不太好。我在这方面哪里出错了?问题更多的是编码这个并将其放入数据库的代码吗?这是真正的罪魁祸首吗?谢谢!@Genadinik我想你哪里出错了(仔细想想)是您调用了
nl2br()
在进行文本替换之前。如果URL末尾有新行,它会被转换成

,然后你的正则表达式阻塞。@Michael我应该尝试将nl2br放在正则表达式之后吗?@Genadinik是的,用你原来的正则表达式试试。@Michael只是用原来的和新的方式尝试了一下,但没有成功rk wither way:(@Michael我刚刚在regext中添加了nl2br()
在进行文本替换之前。如果URL末尾有新行,它会被转换成

,然后你的正则表达式阻塞。@Michael我应该尝试将nl2br放在正则表达式之后吗?@Genadinik是的,用你原来的正则表达式试试。@Michael只是用原来的和新的方式尝试了一下,但没有成功rk威瑟法:(你的意思是问题更多的是我如何把东西放进数据库,而不是当我把它们放出来时会发生什么?这可能与数据库无关-你放在页面上的任何东西都应该按照上面的链接进行转义。因此,如果你想把
放进数据库,你的意思是问题更多的是我如何把东西放进数据库,而不是当我得到它们时会发生什么离开那里?它可能与数据库无关-你在页面上放置的任何内容都应该按照上面的链接进行转义。因此,如果你想放置
,我将html添加到我问题的底部,但这也打破了问题:()()()())它的显示方式不是我粘贴它的方式!!!我们可以看到输入,而不是输出吗?您已经向我们展示了,在您链接的网页上,我们需要在您对其进行任何PHP处理之前查看URL。我将html添加到了我问题的底部,但这也打破了这个问题:()()(()()))它的显示方式不是我粘贴它的方式!!!我们可以吗e输入,而不是输出-您已经向我们展示了您链接的网页,在您对其进行任何PHP处理之前,我们需要查看URLit@Genadinik:很抱歉,这对您没有帮助,但我实际上并没有尝试执行它。我认为它应该可以工作,但可能存在一些冲突[^\s@Genadinik:很抱歉,这对您没有帮助,但我实际上没有尝试执行它。我认为它应该可以工作,但可能在[^\s]中存在冲突