如果密钥在文本中,则替换

时间:2018-11-27 10:38:06

标签: php mysql

我正在尝试使用php创建表情符号系统,以用于我的网站评论earea。我已经为表情符号列表创建了表格。像这样:

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

例如,用户发布了这样的评论:

嗨,这是我的第一个评论:heart::smile:

我想检测表情符号文字。如果注释中存在emoji_key,则将:heart:替换为heart.png。

<img src="emoji/<?php echo $emoji_img;?>" />

反正有这样做吗?

例如:

$userComment = 'Hi this is a first comment i :heart: this comment :smile: .';  Pring应该这样:

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

2 个答案:

答案 0 :(得分:2)

我假设您正在使用mysqli,并且您的连接称为$conn。首先,您需要在用户注释中找到表情符号字符串,您可以使用preg_match_all

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

现在您可以在表情符号表中搜索那些字符串(我假设它的名称为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"> .

答案 1 :(得分:1)

这可能有帮助...
尝试根据您的要求进行修改...

$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;