1

我想防止 UGC 网站上的超链接中出现空格。我已经编写了正则表达式,它工作得很好,除了它没有从链接和锚文本中删除尾随空格。

这是我的代码:

$text = '< a href =   "   http://www.examplesite.com/       "> Example site   </a>';

$text = preg_replace('#(<(\s+)*a(\s+)*href(\s+)*=(\s+)*("|\')(\s+)*([^"]+)("|\')>(\s+)*([^<]+)(\s+)*</a>)#','<a href="$8">$11</a> ',$text);

输出

<a href="http://www.examplesite.com/      ">Example site  </a> 

URL 还包含空格,即http://www.examplesite.com/blog/带有 space.html 的页面

4

3 回答 3

2

尝试这个:

preg_replace("{<\s*a\s*href\s*=\s*(\"|')\s*([^\s]+)\s*\\1>\s*(.*?)\s+</a>}","<a href='$2'>$3</a>",$text);
于 2012-09-19T12:25:39.833 回答
0

我不是正则表达式的专家,但似乎您需要一种回溯的方法,您一直阅读到结束",但您必须回溯到最后一个非空格字符。我不知道该怎么做,所以我会在你拿到半透明的字符串之后做

a) str_replace 或 b) 编写第二个正则表达式

$str = str_replace(" '>","'>", $count);
$str = str_replace(" \">","\">", $count); 
$str = str_replace(" </a>","</a>", $count);

递归直到无法进行更多替换为止。我知道它很原始,但应该可以完成这项工作。

于 2012-09-19T14:17:15.340 回答
-1

试试这个来删除多余的空格

function  RemoveExtraSpaces($str)
{
    while(strpos($str,"  "))
    {
        $str = str_replace("  ", "", $str);
    }
    return $str;
}   
于 2012-09-19T12:50:50.300 回答