urlencode в preg_replace - PullRequest
       20

urlencode в preg_replace

3 голосов
/ 11 июня 2011
$str = preg_replace("'\(look: (.{1,80})\)'Ui",
             "(look: <a href=\"dict.php?process=word&q=\\1\">\\1</a>)",$str);

Я хочу закодировать URL, но как я могу это сделать?

Могу ли я использовать функцию urlencode () в preg_replace ?, что-то в этом роде,

$str = preg_replace("'\(look: (.{1,80})\)'Ui",
            "(look: <a href=\"dict.php?process=word&q=\\1\">\\1</a>)",$str);

Есть ли у вас какие-либо идеи о кодировании URL в preg_replace?

1 Ответ

9 голосов
/ 11 июня 2011

Вы можете использовать preg_replace_callback, что позволяет создать строку замены, непосредственно запустив код:

$str = preg_replace_callback(
    "'\(look: (.{1,80})\)'Ui",
    create_function(
        '$matches',
        'return \'(look: <a href="dict.php?process=word&q='.urlencode($matches[1]).'">'.
          $matches[1].'</a>)\';'
    ),
    $str);

Если вы используете PHP> = 5.3, вы можете сделать описанное выше менее болезненным:

$str = preg_replace_callback(
    "'\(look: (.{1,80})\)'Ui",
    function($matches) {
        return "(look: <a href=\"dict.php?process=word&q=".urlencode($matches[1])."\">".
               $matches[1]."</a>)";
    },
    $str);
...