如果键在文本中则替换

vq8itlhq  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(205)

我正在尝试做一个表情系统使用php为我的网站评论earea。我已经为emoji列表创建了表。这样地:

+----------+------------+-------------+
| emoji_id |  emoji_key |  emoji_img  |
+----------+------------+-------------+
|    1     |   :smile:  |  smile.png  |
+----------+------------+-------------+
|    2     |   :heart:  |  heart.png  |
+----------+------------+-------------+

例如,用户发布了如下评论:
嗨,这是我第一次评论 :heart: 此评论 :smile: .
我想检测表情符号的文本。如果注解中存在emoji\ u键,则替换:heart:to heart.png。 <img src="emoji/<?php echo $emoji_img;?>" /> 有什么办法吗?
例如: $userComment = 'Hi this is a first comment i :heart: this comment :smile: .'; Spring应该是这样的:

Hi this is my first comment <img src="emoji/heart.png"> this comment <img src="emoji/smile.png">
qgzx9mmu

qgzx9mmu1#

这可能会有帮助。。。
试着根据你的要求修改它。。。

$userComment = 'Hi this is a first comment i :heart: this comment :smile: .';
preg_match_all('/:(.*?)\:/s', $userComment, $m);

$newComment = str_replace($m[0], ' <img src="emoji/'.$m[1].'.png">', $userComment );

echo $newComment;
egdjgwm8

egdjgwm82#

我假设您正在使用mysqli,并且您的连接被调用 $conn . 首先,您需要在您的用户评论中找到emoji字符串,您可以使用它 preg_match_all :

preg_match_all('/(:\w+:)/', $userComment, $matches);

现在,您可以在emoji表中搜索这些字符串(我假设它被称为 emojis :

$sql = "SELECT * FROM emojis WHERE emoji_key IN ('" . implode("','", $matches[1]) . "')";
$result = $conn->query($sql);

现在检查结果并使用替换字符串中的值 str_replace :

while ($row = $result->fetch_assoc()) {
    $userComment = str_replace($row['emoji_key'], "<img src=\"emoji/{$row['emoji_img']}\">", $userComment);
}
echo $userComment;

输出:

Hi this is a first comment i <img src="emoji/heart.png"> this comment <img src="emoji/smile.png"> .

相关问题