2009-11-10 2 views
2

У меня есть некоторые HTML, которая запускается через PHP:preg_replace с функцией

<a href="?char=">&</a>

и я хотел использовать preg_replace заменить первый & с urlencode г значение этого. Однако:

preg_replace("/char=\">(.*?)<\/a>/", "char=".urlencode("$1")."\">$1</a>", $links);

Но это дает мне значение $1, вместо ожидаемой обратной ссылки. Как я могу сделать то, что я пытаюсь сделать (сделать вывод похожим на <a href="?char=%26">&</a>)?

ответ

3

Вы можете использовать модификатор e в своем регулярном выражении или использовать функцию preg_replace_callback (см. Документ).

+2

Обратите внимание, что при использовании '/ e' фрагмент сценария замены должен быть строкой, чтобы предотвратить ее интерпретацию перед вызовом preg_replace:' preg_replace ('/.../ e', '"char = ". urlencode (" $ 1 ")." \\ "> $ 1" ', $ links); ' – outis

1

Да, оба е Модификатор и preg_replace_callback функциональные подходы могут сделать эту работу.
Я лично предпочитаю решение одной строки:.?

preg_replace ("/ обугленного = \"> (*) </а>/е», «символ = ". UrlEncode ("$ 1"). "\\"> $ 1 "', $ link);

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