如何用%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”是旧字符串。
答案 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是一个非捕获组,其中不允许正则表达式引擎回溯。