关于PHP接收emoji转换存储问题?

在手机端输入emoji时遇到一个问题(无法储存进数据库)。
搜索问题后发现时数据库的utf8mb4原因(因为emoji是4字节,而utf-8得数据库是3字节)。
然后得到这么一个js函数可以将emoji表情转换为utf-8字符保存

function utf16toEntities(str) { //检测utf16emoji表情 转换为实体字符以供后台存储
         var patt=/[\ud800-\udbff][\udc00-\udfff]/g;
         str = str.replace(patt, function(char){
               var H, L, code;
               if (char.length===2) {   //辅助平面字符(我们需要做处理的一类)
                     H = char.charCodeAt(0); // 取出高位
                     L = char.charCodeAt(1); // 取出低位
                     code = (H - 0xD800) * 0x400 + 0x10000 + L - 0xDC00; // 转换算法
                     return "&#" + code + ";";
               } else {
                     return char;
               }
         });
         return str;
      }

问题就是我想把这个函数转成PHP函数,请问该怎么转啊??😌😌😌

阅读 2.4k
3 个回答

数据库相关字段用utf8mb4不行吗,为什么非得转呢

你直接存的时候$value = json_encode($value)弄成json格式存不行吗。。。。只不过这样取出来的时候要json_decode()解析一下

新手上路,请多包涵

通过iconv将4字节的UTF-8转成UCS-4就可以了,具体的方法可以参考这篇:
PHP-处理emoji表情

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题