php将emoji表情进行过滤,js过滤emoji表情

发布时间:2022-11-17

本文目录一览:

1、php怎样过滤掉特殊字符啊 ☺
2、js 怎么把emoji表情给过滤掉
3、求php过滤ios的Emoji表情的方法,如果字符串中包含Emoji表情就删除。
4、php的preg_replace过滤emoji字符,要怎么做

php怎样过滤掉特殊字符啊 ☺

过滤掉特殊字符,可以考虑使用字符串替换的方法,在php中替换字符效率最高也是最简单字符替换函数str_replace函数。 使用方法str_replace(find, replace, string, count) 参数说明

  • find 必需。规定要查找的值。
  • replace 必需。规定替换 find 中的值的值。
  • string 必需。规定被搜索的字符串。
  • count 可选。一个变量,对替换数进行计数。 实例
str_replace("iwind", "kiki", "i love iwind, iwind said");

将输出 "i love kiki, kiki said" 当然你也可以采取正则替换的方法,该函数是 preg_replace

js 怎么把emoji表情给过滤掉

  1. 确定你的 emoji 的引入途径或者是否在项目内部加载了这个插件;
  2. 找到 emoji 引入的途径,把它关闭,并在 JS 代码内删除引入 emoji 的调用方法;
  3. 把该表情的 HTML 部分删除或者设置为隐藏;
  4. 如果你以上 3 步都没办法做到,那么可以考虑直接找到 emoji 表情存放页面的 HTML 直接删除甚至使用 DIV 覆盖(不推荐)。

求php过滤ios的Emoji表情的方法,如果字符串中包含Emoji表情就删除。

网上已经有开源的了!你参考下: iOS 5.0 之前,苹果都是采用 3 个字节来承接 emoji 表情,Java 的普通 char 可以支持显示。但 iOS 5.0 之后,苹果升级了系统自带的 emoji 表情输入法,用的 Unicode 6 标准来统一,是采用 4 个 bytes 来承接一个 emoji 表情。如果不做处理的话,这种表情直接存储到 mysql5.5 以下的数据库是会报错的。就像这两个表情一样:口口,在 Windows 8 以下估计都不支持显示,可能会显示成框框,可能压根就是空白,你可以在 Mac 中使用 Safari 浏览器中,就可以看到。经过测试,在 Mac 就算用 Chrome 浏览器(Version 25.0.1364.172)也是不行的。 这种数据在 Mysql 5.5 之前,UTF-8 支持 1-3 个字节的编码,从 Mysql5.5 开始后,可以支持 4 个字节的 UTF 编码,但要特殊标记。修改 Mysql 相应存储字段为 utf8mb4。修改语句如下:

ALTER TABLE table_name
MODIFY COLUMN content varchar(500)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
DEFAULT NULL COMMENT 'content of message';

在某种业务情景下,我们可以选择过滤掉这种“非法”的字符。我采用的方式是,在字符上面做操作,下面是 Java 示例代码,核心的代码附上,应该是无法直接下载就能够编译,你得小小的做一些微调,没有额外的依赖:

public class EmojiFilter {
    /**
     * 检测是否有 emoji 字符
     * @param source
     * @return 一旦含有就抛出
     */
    public static boolean containsEmoji(String source) {
        if (StringUtils.isBlank(source)) {
            return false;
        }
        int len = source.length();
        for (int i = 0; i < len; i++) {
            char codePoint = source.charAt(i);
            if (isEmojiCharacter(codePoint)) {
                // 判断到了这里表明,确认有表情字符
                return true;
            }
        }
        return false;
    }
    private static boolean isEmojiCharacter(char codePoint) {
        return (codePoint == 0x0) ||
               (codePoint == 0x9) ||
               (codePoint == 0xA) ||
               (codePoint == 0xD) ||
               ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
               ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) ||
               ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
    }
    /**
     * 过滤 emoji 或者 其他非文字类型的字符
     * @param source
     * @return
     */
    public static String filterEmoji(String source) {
        if (!containsEmoji(source)) {
            return source; // 如果不包含,直接返回
        }
        // 到这里铁定包含
        StringBuilder buf = null;
        int len = source.length();
        for (int i = 0; i < len; i++) {
            char codePoint = source.charAt(i);
            if (isEmojiCharacter(codePoint)) {
                if (buf == null) {
                    buf = new StringBuilder(source.length());
                }
                buf.append(codePoint);
            }
        }
        if (buf == null) {
            return source; // 如果没有找到 emoji 表情,则返回源字符串
        } else {
            if (buf.length() == len) { // 这里的意义在于尽可能少的 toString,因为会重新生成字符串
                buf = null;
                return source;
            } else {
                return buf.toString();
            }
        }
    }
}

还有优化的空间,但是已经能够满足大多数情况的需求,附上单元测试(JUnit4):

public class EmojiFilterTest {
    /**
     * 测试 emoji 表情
     */
    @Test
    public void fileterEmoji() {
        String s = "body口口213这是一个有各种内容的消息, Hia Hia Hia !!!! xxxx@@@...*)!" +
                   "(@*$@(!)@*)!$!)@^%@(!. 口口口], ";
        String c = Utils.filterEmoji(s);
        assertFalse(s.equals(c));
        String expected = "body213这是一个有各种内容的消息, Hia Hia Hia !!!! xxxx@@@...*)" +
                          "!(@*$@(!)@*)!$!)@^%@(!. ], ";
        assertEquals(expected, c);
        assertSame(expected, "body213这是一个有各种内容的消息, Hia Hia Hia !!!! xxxx@@@...*)" +
                            "!(@*$@(!)@*)!$!)@^%@(!. ], ");
        assertSame(c, Utils.filterEmoji(c));
    }
}

php的preg_replace过滤emoji字符,要怎么做

PHP 的 preg_replace 函数是执行一个正则表达式的搜索和替换,其具体用法如下: 语法

preg_replace(正则表达式, 替换成, 字符串, 最大替换次数【默认-1,无数次】, 替换次数)

实例

<?php
// 把 height 高度属性删除,并添加 width="100%"
$str = 'divp12312321/pimg src="xx.jpg" height="213" /span111/spanimg src="xz.jpg" //div';
$str = preg_replace("/height\=\"[0-9]+?\"/", "", $str);
$str1 = preg_replace("/src=\"(.+?)\"/", "src=\"$1\" width=\"100%\"", $str);
print_r($str1);
?>