在href中替换字符串中的空格

时间:2013-11-23 21:05:29

标签: php string replace preg-replace spaces

如何用%20替换href中的空格?

我已经得到了这个:(它不仅取代了href属性中的空格)

function callback($string){
$string = substr($string,0, -2);
$string = substr($string, 9);
$string = preg_replace('/\s+/','%20',$string);
$string = '<a href="'.$string.'">';
return $string;
}
$suchen = '(<a href="(.*?)">)s';
echo preg_replace_callback($suchen,create_function('$treffer','return callback($treffer[0]);'),$new7);

“$ new7”是旧字符串。

2 个答案:

答案 0 :(得分:2)

如果您想要的是使字符串url-safe,首选方法是使用urlencode()将空格替换为%20和其他讨厌的东西。来自示例in the documentation

echo '<a href="mycgi?foo=', urlencode($userinput), '">';

答案 1 :(得分:0)

假设您的href属性始终被引用,您可以使用此模式:

$pattern = '~(?>\bhref\s*=\s*["\']|\G(?<!^))[^ "\']*+\K ~';
$result = preg_replace($pattern, '%20', $html);

模式细节:

~
(?>                     # open an atomic group (*)
    \bhref\s*=\s*["\']  # attribute name until the quote
  |                     # OR
    \G(?<!^)            # contiguous to a precedent match
)                       # close the atomic group
[^ "\']*+               # content that is not a space or quotes (optional) 
\K                      # resets the start of the match from match result
[ ]                     # a space
~

(*)atomic group是一个非捕获组,其中不允许正则表达式引擎回溯。