У меня есть функция, как WIKI ссылка
function bbcode($text)
{
$patterns = array
(
'|\[\[(.*?)\|(.*?)\]\]|i',
);
$replacements = array
(
'<a href=?word=\1>\2</a>',
);
$text = str_replace("\n", '<br>', trim($text));
$text = preg_replace($patterns, $replacements, $text);
return $text;
}
Но когда я использую f.e.
[[бла бла | текстовый текст]]моя ссылка выглядит:
mypage.php? слово = бла
но я хочу
mypage.php? word = бла бла
где проблема с этой строкой «бла бла» с пробелом? Как это предотвратить?
'<a href=?word=\1>\2</a>'
Должно быть
'<a href="?word=\1">\2</a>'
Как и без пробелов, в этом случае синтаксический анализатор HTML будет предполагать, что вы определяете атрибут «bla» для привязки.
Имейте в виду, что это базовый пример, и эта реализация уязвима для эксплойтов XSS, если вы еще не очистили $bbcode
ввод с помощью htmlspecialchars () и др.
Других решений пока нет …