Есть обработчик бб-кодов:
$content=preg_replace('(\[(URL|url)\=((http|ftp|https):\/\/[a-zA-Z0-9\/\-\+\?\&\.\=\_\~\#\'\%\;]*)\](.+?)\[\/(URL|url)\])', '<a rel="nofollow" href="http://www.site.net/index.php?page=away&to=$2">$4</a>', $content);
А нужно чтобы работало вот такое:
$content=preg_replace('(\[(URL|url)\=((http|ftp|https):\/\/[a-zA-Z0-9\/\-\+\?\&\.\=\_\~\#\'\%\;]*)\](.+?)\[\/(URL|url)\])', '<a rel="nofollow" href="http://www.site.net/index.php?page=away&to='.urlencode($2).'">$4</a>', $content);
У меня это не работает, т.к. $2 применяю за рамками preg_replace.
Как это сделать? Т.е. применить функцию к $2
Спустя 6 минут, 4 секунды (15.10.2010 - 09:48) DedMorozzz написал(а):
Не внятно написано, что желаемо получить, без длительного разбирательства. И по сему:
если применить ф-ю на вхождение, то так: urlencode(.'$2'.)
если применить ф-ю на вхождение, то так: urlencode(.'$2'.)
Спустя 9 минут (15.10.2010 - 09:57) aledain написал(а):
href="http://www.site.net/index.php?page=away&to=$2"
$2 - это ссылка
требуется вместо самого $2 подставить urlencode от неё. или применить по желанию другую функцию.
Спустя 12 минут, 40 секунд (15.10.2010 - 10:09) aledain написал(а):
Попробовал так
не сработало
$content=preg_replace('(\[(URL|url)\=((http|ftp|https):\/\/[a-zA-Z0-9\/\-\+\?\&\.\=\_\~\#\'\%\;]*)\](.+?)\[\/(URL|url)\])', '<a rel="nofollow" href="http://www.site.net/index.php?page=away&to='.urlencode(.'$2'.).'">$4</a>', $content);
не сработало
Спустя 5 минут, 43 секунды (15.10.2010 - 10:15) arvitaly написал(а):
echo preg_replace("~.*(t1).*$~U",'aaa' . urlencode('$1') . 'ccc',"aaat1bbb");
работает, значит проблема в другом
Спустя 6 минут, 12 секунд (15.10.2010 - 10:21) aledain написал(а):
Попробовал так
Сейчас ошибку не выдаёт, но замену не производит
Пишет вместо ссылки само $2
$content=preg_replace('(\[(URL|url)\=((http|ftp|https):\/\/[a-zA-Z0-9\/\-\+\?\&\.\=\_\~\#\'\%\;]*)\](.+?)\[\/(URL|url)\])', '<a rel="nofollow" href="http://www.site.net/index.php?page=away&to='.urlencode('$2').'">$4</a>', $content);
Сейчас ошибку не выдаёт, но замену не производит
Пишет вместо ссылки само $2
Спустя 6 минут, 7 секунд (15.10.2010 - 10:27) arvitaly написал(а):
Покажите исходную строку
Спустя 9 минут, 31 секунда (15.10.2010 - 10:37) aledain написал(а):
И так ещё раз попытаюсь более понятно объяснить.
Исходная строка
Как вставить код бб=кодов здесь?
Она заменяется на
Это работает корректно.
Но требуется к вхождению $2 (ссылка http://ya.ru) применить функцию urlencode
Это-то как раз и не работает, т.к я не знаю как правильно применять функции к вхождениям.
А уже принимающий скрипт сделает urldecode
$content=preg_replace('(\[(URL|url)\=((http|ftp|https):\/\/[a-zA-Z0-9\/\-\+\?\&\.\=\_\~\#\'\%\;]*)\](.+?)\[\/(URL|url)\])', '<a rel="nofollow" href="http://www.site/index.php?page=away&to=$2">$4</a>', $content);
Исходная строка
яндекс
Как вставить код бб=кодов здесь?
Она заменяется на
<a rel="nofollow" href="http://www.site.net/index.php?page=away&to=http://ya.ru">яндекс</a>
Это работает корректно.
Но требуется к вхождению $2 (ссылка http://ya.ru) применить функцию urlencode
Это-то как раз и не работает, т.к я не знаю как правильно применять функции к вхождениям.
А уже принимающий скрипт сделает urldecode
Спустя 2 минуты, 37 секунд (15.10.2010 - 10:40) twin написал(а):
preg_replace_callback()
Вот тут посмотри, мож чего полезного найдешь.
Вот тут посмотри, мож чего полезного найдешь.
Спустя 6 минут, 27 секунд (15.10.2010 - 10:46) arvitaly написал(а):
Да нужно callback, ваш вариант не будет работать так как urlencode выполняется перед выполнение preg_replace
Спустя 5 минут, 29 секунд (15.10.2010 - 10:51) aledain написал(а):
Значит решается всё не так просто как я рассчитывал.
К сожалению я регулярные выражения совершенно не знаю, да и пхп тоже довольно слабо.
Может ли кто-нибудь помочь?
Вот код который нужно исправить:
К сожалению я регулярные выражения совершенно не знаю, да и пхп тоже довольно слабо.
Может ли кто-нибудь помочь?
Вот код который нужно исправить:
// external uris
// text
$content=preg_replace('(\[(URL|url)\=((http|ftp|https):\/\/[a-zA-Z0-9\/\-\+\?\&\.\=\_\~\#\'\%\;]*)\](.+?)\[\/(URL|url)\])', '<a rel="nofollow" href="http://www.site.net/index.php?page=away&to=$2">$4</a>', $content);
// For people too lazy to put http:// on the uri. /Shouldn't/ be XSSable
$content=preg_replace('(\[(URL|url)\=([a-zA-Z0-9\/\-\+\?\&\.\=\_\~\#\'\%\;]*)\](.+?)\[\/(URL|url)\])', '<a rel="nofollow" href="http://www.site.net/index.php?page=away&to=http://$2">$3</a>', $content);
// uri
$content=preg_replace('(\[url\]((http|ftp|https):\/\/([a-zA-Z0-9\/\-\+\?\&\.\=\_\~\#\'\%\;]*))\[\/url\])','<a rel="nofollow" href="http://www.site.net/index.php?page=away&to=$2://$3">$2://$3</a>',$content);
// lazy http:// people...
$content=preg_replace('(\[url\]([a-zA-Z0-9\/\-\+\?\&\.\=\_\~\#\'\%\;]*)\[\/url\])','<a rel="nofollow" href="http://www.site.net/index.php?page=away&to=http://$1">http://$1</a>',$content);
////////////////
Спустя 51 минута, 25 секунд (15.10.2010 - 11:43) twin написал(а):
Я дал ссылку, куда еще подробнее...
Разве что в раздел - предлагаю работу
Разве что в раздел - предлагаю работу
Спустя 8 минут, 1 секунда (15.10.2010 - 11:51) aledain написал(а):
И на а этом спасибо. Действительно помогло.
Спустя 14 минут, 50 секунд (15.10.2010 - 12:06) aledain написал(а):
Вместо
сделал
Но при этом получаю "Внутренняя ошибка сайта."
Подскажите где косяк?
$content=preg_replace('(\[(URL|url)\=((http|ftp|https):\/\/[a-zA-Z0-9\/\-\+\?\&\.\=\_\~\#\'\%\;]*)\](.+?)\[\/(URL|url)\])', '<a rel="nofollow" href="http://www.site.net/index.php?page=away&to=$2">$4</a>', $content);
сделал
function extredir($match)
{
return '<a rel="nofollow" href="http://www.site.net/index.php?page=away&to='.urlencode($match[2]).'">'.$match[4].'</a>';
}
$content=preg_replace_callback('(\[(URL|url)\=((http|ftp|https):\/\/[a-zA-Z0-9\/\-\+\?\&\.\=\_\~\#\'\%\;]*)\](.+?)\[\/(URL|url)\])', 'extredir', $content);
Но при этом получаю "Внутренняя ошибка сайта."
Подскажите где косяк?
Спустя 8 минут, 23 секунды (15.10.2010 - 12:14) arvitaly написал(а):
Это несвязанные вещи
Спустя 1 минута, 16 секунд (15.10.2010 - 12:15) aledain написал(а):
Всё разобрался. Сорри.