PHP正则表达式-单引号无效-细枝预转义

PHP正则表达式-单引号无效-细枝预转义,php,preg-replace,expression,twig,Php,Preg Replace,Expression,Twig,正则表达式中的单引号有问题。 我想做的是将字符串中的smiley替换为html图像标记。 所有的笑脸都在起作用,除了悲伤的笑脸:'-(因为它只有一句话)。 Magic Quotes已关闭(使用if(g!et_Magic_Quotes_gpc())dd('mq off');)测试) 那么,让我给你看一些代码 protected $emoticons = array( // ... 'cry' => array( 'image'

正则表达式中的单引号有问题。 我想做的是将字符串中的smiley替换为html图像标记。 所有的笑脸都在起作用,除了悲伤的笑脸:'-(因为它只有一句话)。 Magic Quotes已关闭(使用if(g!et_Magic_Quotes_gpc())dd('mq off');)测试)

那么,让我给你看一些代码

    protected $emoticons = array(
        // ...
        'cry' => array(
            'image' => '<img class="smiley" src="/image/emoticon/cry.gif" />',
            'emoticons' => array(":'(", ";'(", ":'-(", ";'-(")
        ),
    );
问题:nl2br自动预转义输入字符串,因此“将被转义字符串替换为”'

我需要这个nl2br将换行符显示为
,我还需要转义,以禁止用户输入中的html标记。 我需要替换图释来替换我的图释(自制的树枝延伸)。 我在过滤链的末尾也需要raw,否则所有的HTML smiley-img标记都会转义,我会在评论文本中看到raw-HTML

我能在这里做什么?这里唯一的问题似乎是nl2br也逃逸了。这不是一个坏主意,但在我的情况下,它将摧毁其中包含的所有悲伤的微笑

仍在寻找解决方案,我希望你能帮助我

最好的,
titan

我在表情方法中添加了一个可选参数:

public function replaceEmoticons($input, $use_emo_encoding_for_regex = true) {
我对每个部分都做了一点小改动:

foreach ($emo_group['emoticons'] as $emoticon) {

    if ($use_emo_encoding_for_regex === true) {
        $emoticon = htmlspecialchars($emoticon, ENT_QUOTES);
    }

    $regex_emo_part[] = preg_quote($emoticon, '#');

}

它工作了!所有表情符号都被替换了!

你能显示输入字符串吗?可能它没有引号,但html实体
或一些unicode符号?你的代码似乎没有任何问题:谢谢!谢谢。你给我带来了正确的方法,我更新了上面的问题。@Titanird如果你“逃跑”会发生什么“在替换之前,请先删除表情符号(例如,
$emoticon=nl2br($emoticon);
在您
preg_quote
it之前)@我在replaceEmoticons方法中添加了一个可选参数,$encode\u emoticons=true。因此,这些表情被编码,字符被转换成html符号。我认为这根本不是最好的方法,但它可以工作。有时我想将此方法应用于未被转换的输入字符串。但这没关系。在这种情况下,我可以使用replA表情符号(假),谢谢!
public function replaceEmoticons($input, $use_emo_encoding_for_regex = true) {
foreach ($emo_group['emoticons'] as $emoticon) {

    if ($use_emo_encoding_for_regex === true) {
        $emoticon = htmlspecialchars($emoticon, ENT_QUOTES);
    }

    $regex_emo_part[] = preg_quote($emoticon, '#');

}