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

我想编码url,但我该怎么做?urlencode in preg_replace

我可以使用进行urlencode()中的preg_replace函数?类似的东西,

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

你有关于preg_replace函数编码URL任何想法?

回答

6

您可以使用preg_replace_callback,它允许你通过直接运行的代码产生替换字符串:如果你使用PHP> = 5.3

$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); 

,可以使少一点痛苦之上:

$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); 
+1

感谢,我想你忘了更改的preg_replace作为preg_replace_callback – ocanal 2011-06-11 13:26:34

+0

第一个代码提取缺少单引号的一些逃脱的return语句,应该是 '“回报\”(看:\'. $matches[1].\')\“;”' – 2014-03-04 21:06:51

+0

非常感谢〜! – Lin 2018-01-17 07:15:16