如何在PHP中使用preg_replace函数忽略正则表达式中的单引号?

时间:2013-12-27 00:57:01

标签: php html regex symfony twig

我基本上试图将字符串中任何带有哈希标记的单词转换为链接:

以下是我的代码:

public function linkify($text)
{
    // ... generating $url
    $text = preg_replace("/\B#(\w+)/", "<a href=" . $url . "/$1>#$1</a>", $text);

    return $text;
}

除了$ text包含单引号的情况外,它的效果非常好。这是

例1:

  

“你的#name是什么?”

     

结果:“你的#name是什么?”工作正常。

例2:

  

“你的#name是什么?”

     

结果:“什么&amp; #039;你的#name?”不行,我想要   结果:“你的#name是什么?”

有关如何使用PHP摆脱单引号问题的想法吗?

EDIT1: 只是为了获取信息,我得到了html_entity_decode($ text)之前或之后 “什么&amp; #039;是你的#name?”

4 个答案:

答案 0 :(得分:1)

像这样。

$string = "' \'' '"; 
$string = preg_replace("#[\\\\']#", "\'", $string);  

答案 1 :(得分:1)

有些东西正在保护你的html实体。如果字符串来自get / post请求,这可以节省您的生命 - 但是它来自可信来源只需使用html_entity_decode将其转换回来。正如你可能已经意识到的那样,这是一种表达单引号的方式。

答案 2 :(得分:1)

如果问题是html_entities,那么也许你只需要html_entity_decode你的$ text

$text = preg_replace("/\B#(\w+)/", "<a href=" . $url . "/html_entity_decode($1)>#$1</a>", $text);

答案 3 :(得分:0)

感谢大家的建议,我终于用这个解决了这个问题:

html_entity_decode($str, ENT_QUOTES);