2010-03-07 118 views
1

我正在使用函数preg_replace,但我无法弄清楚如何使它工作,该函数似乎不适用于我。preg_replace:替换使用%

我想要做的是将字符串转换为链接,如果任何单词包含%(百分比)字符。

例如,如果我有字符串“去%mysite”,我想将mysite字转换成链接。 我试过以下...

$data = "go to %mysite"; 
$result = preg_replace('/(^|[\s\.\,\:\;]+)%([A-Za-z0-9]{1,64})/e', 
      '\\1%<a href=#>\\2</a>', $data); 

...但它不起作用。

任何帮助,将不胜感激。

由于

+1

你是什么意思,“它不工作”?它根本不改变输入?它错误地改变了输入? – 2010-03-07 23:58:07

+0

谢谢Asher的回复。 我没有设法调试此代码,但是当我在$ data变量上添加一个%时,会发生什么情况,代码仅停留在preg_replace函数中。我也尝试添加一个try catch,但同样的事情发生,代码只停在preg_replace 任何想法?有没有其他办法可以达到同样的效果? 胡安 – Juan 2010-03-08 12:00:23

回答

3

这里的问题是e改性剂,其评价替换为PHP代码和失败,将输出go to %<a href=#>mysite</a>并且如果期望致命错误


卸下e属性结果,你不必改变其他任何东西。

但我认为,preg_replace_callback是你真正需要的,即:

function createLinks($matches) 
{ 
    switch($matches[2]) 
    { 
     case 'mysite': 
      $url = 'http://mysite.com/'; 
      break; 
     case 'google': 
      $url = 'http://www.google.com/'; 
      break; 
    } 

    return "{$matches[1]}%<a href=\"{$url}\">{$matches[2]}</a>"; 
} 

$data = "go to %mysite or visit %google"; 
$data = preg_replace_callback(
    '/(^|[\s\.\,\:\;]+)%([A-Za-z0-9]{1,64})/', 
    'createLinks', 
    $data 
); 

,这将导致go to %<a href="http://mysite.com/">mysite</a> or visit %<a href="http://www.google.com/">google</a>

+0

嗨dev-null-dweller,谢谢你的回答。你知道我该如何解决这个问题吗?我必须使用e修饰符吗? 谢谢 胡安 – Juan 2010-03-08 11:55:02

+0

你没有,检查我编辑的答案更多细节 – 2010-03-08 17:48:16

+0

感谢dev-null-dweller,这正是我的目标。我会试一试。再次感谢 – Juan 2010-03-09 08:59:38