php - foreach 循环中的 str_replace 错误

标签 php jquery html chat

我在 php 中的小文本转笑脸/表情符号函数时遇到问题,该函数基于 str_replace 。这是我的代码。

$smileys = array( ":inlove:" => "/smileys/smiley2.png",
                      ":cool:" => "/smileys/smiley3.png",
                      ":tongue:" => "/smileys/smiley4.png",
                      ":wow:" => "/smileys/smiley5.png",
                      ":smile:" => "/smileys/smiley15.png",
                      ":happy:" => "/smileys/smiley6.png",
                      ":funny:" => "/smileys/smiley7.png",
                      ":wink:" => "/smileys/smiley8.png",
                      ":worried:" => "/smileys/smiley10.png",
                      ":pokerface:" => "/smileys/smiley9.png",
                      ":poop:" => "/smileys/smiley12.png",
                      ":thinking:" => "/smileys/35_thinking.png",
                      ":triumph:" => "/smileys/49_triumph.png",
                      ":vulcan:" => "/smileys/109_vulcan.png",
                      ":pointup:" => "/smileys/102_point_up_2.png",
                      ":santa:" => "/smileys/135_santa.png",
                      ":spy:" => "/smileys/134_spy.png");

if(isset($_POST['message'])) {
    $messagePlain = $_POST['message'];
    $messageSmileys = $messagePlain;

    foreach($smileys as $key => $img) {
        $messageSmileys = str_replace($key, '<img src="' . $img . '" />', $messageSmileys);
    }

    $connection->query(// Message to db);
}

效果很好。但问题是,当用户连续输入超过 14 个表情符号时,HTML 就会被破坏,如下所示:

HTML 源代码如下:

<div class="media-body">
                            <h4 class="media-heading">test <small>07. August. 2017 01:34</small></h4>
                             <img src="/smileys/smiley2.png" /> <img src="/smileys/smiley3.png" /> <img src="/smileys/smiley5.png" /> <img src="/smileys/smiley4.png" /> <img src="/smileys/smiley15.png" /> <img src="/smileys/smiley6.png" /> <img src="/smileys/smiley7.png" /> <img src="/smileys/smiley8.png" /> <img src="/smileys/smiley10.png" /> <img src="/smileys/smiley9.png" /> <img src="/smileys/smiley12.png" /> <img src="/smileys/49_triumph.png" /> <img src="/smileys/109_vulcan.png" /> <img src="/smileys/102_point_up_2.p                            </div>
</div>

有人可以帮我解决这个问题吗?为什么 HTML 标签是 <img>突然毁掉了?

最佳答案

查看你的输出:

<img src="/smileys/smiley2.png" /> <img src="/smileys/smiley3.png" /> <img src="/smileys/smiley5.png" /> <img src="/smileys/smiley4.png" /> <img src="/smileys/smiley15.png" /> <img src="/smileys/smiley6.png" /> <img src="/smileys/smiley7.png" /> <img src="/smileys/smiley8.png" /> <img src="/smileys/smiley10.png" /> <img src="/smileys/smiley9.png" /> <img src="/smileys/smiley12.png" /> <img src="/smileys/49_triumph.png" /> <img src="/smileys/109_vulcan.png" /> <img src="/smileys/102_point_up_2.p

上述字符串的长度为 499 个字符。我坚信数据库表中的 message 字段限制为 500 个字符或其他字符,并且输出会被截断为这些位。

解决方案/建议

如果您使用 MySQL 数据库服务器,我强烈建议您将数据库类型从 VARCHAR(500) 更改为 TEXTLONGTEXT .

关于php - foreach 循环中的 str_replace 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45537663/

相关文章:

php - 传递变量参数列表

php - Drupal 7 EntityFieldQuery 分类字段的字段条件(多个值)不在我的排除数组中

javascript - 为多个网页组织 javascript/jQuery

html - 导航栏不会固定到顶部

php - 跨 3 个数据库表的产品搜索

php - Codeigniter的 session 表结构

php - 如何使用 PHP 从上传到本地主机的一个 html 文件重定向到磁盘上的另一个 html 文件?

javascript - Angular 6 像 jQuery 一样触发点击事件

javascript - 从 AJAX 调用成功返回 '0' 或 0?

javascript - 如何使用js绘制基于方程的图形