2013-11-23 4 views
0

Как заменить пробелы в href на% 20?Заменить пробелы из строки в href

Я Allready получил это: (Это меняет не только пробелы в 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" старая строка.

+1

'$ строка = preg_replace ('/ \ S + /', '% 20', $ строка);', вероятно, может быть просто '$ строка = str_replace (» '' % 20 ', $ string); ' –

+0

@JohnConde это тоже работает, но это не причина замены других пространств. –

+0

@ qwertz1029384756: Что именно не работает? Не могли бы вы показать нам пример URL-адреса, который не работает должным образом? –

ответ

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 не является захват группы, где для двигателя regex не допускается откат.

2

Если вы хотите сделать строку url-safe, предпочтительный метод использует urlencode(), чтобы заменить пробелы% 20 и другими неприятными вещами. Из примера in the documentation:

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

+1 для 'urlencode()', однако я не уверен, что OP имеет доступ к '$ userinput' в данном случае. –

Смежные вопросы