gpt4 book ai didi

PHP 正则表达式 - 单引号不起作用 - TWIG 预转义

转载 作者:搜寻专家 更新时间:2023-10-31 22:02:13 26 4
gpt4 key购买 nike

我在正则表达式中遇到单引号问题。我想要做的是将字符串中的笑脸替换为 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(":'(", ";'(", ":'-(", ";'-(")
),
);

我替换所有表情的方法如下:

    public function replaceEmoticons($input) {

$output = $input;

foreach ($this->emoticons as $emo_group_name => $emo_group) {

$regex_emo_part = array();

foreach ($emo_group['emoticons'] as $emoticon) {
$regex_emo_part[] = preg_quote($emoticon, '#');
}

$regex_emo_part = implode('|', $regex_emo_part);
$regex = '#(?!<\w)(' . $regex_emo_part .')(?!\w)#';
$output = preg_replace($regex, $emo_group['image'], $output);

}

return $output;

}

但正如我所说:' 杀死它。那里没有替代品。 :-) :-/等等正在工作。为什么?仅供引用 $regex 的内容:#(?!<\w)(\:\'\(|;\'\(|\:\'\-\(|;\'\-\()(?!\w)#

这里有什么问题,你能帮帮我吗?

更新:

感谢@cheery 和 cychoi。替换方法没问题,你说对了。我发现了问题。我的字符串在转发到 replaceEmoticons 方法之前被转义。我使用 TWIG 模板引擎,并在我自制的 replace_emoticon 过滤器之前使用 |nl2br 过滤器。让我演示给你看。这是最终模板中的输出。这是一个显示博客条目评论的模板:

{{ comment.content|nl2br|replace_emoticons|raw }}

问题:nl2br 是自动预转义输入字符串,所以 ' 被转义的字符串替换 '

我需要这个 nl2br 将换行符显示为
- 我也需要转义,以禁止用户输入中的 html 标签。我需要 replace_emoticons 来替换我的表情符号(自制的 TWIG 扩展)。我在过滤器链的末尾也需要原始的,否则所有 HTML 笑脸 img 标签都会被转义,我将在评论文本中看到原始的 html。

我可以在这里做什么?这里唯一的问题似乎是 nl2br 也转义了 '。这不是个坏主意,但在我的情况下,它会破坏所有包含 ' 的悲伤笑脸。

仍在寻找解决此问题的方法,希望您能帮助我。

最好的,泰坦

最佳答案

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

public function replaceEmoticons($input, $use_emo_encoding_for_regex = true) {

我稍微改变了 foreach 部分:

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

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

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

}

有效!所有表情都被替换了!

关于PHP 正则表达式 - 单引号不起作用 - TWIG 预转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26813014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com