微信小程序中使用emoji表情相關說明

本帖將聚合一些跟emoji表情有關的知識;前端傳過來的昵稱和備注信息一定要經過嚴格的正則表達式過濾,放置出現XSS等攻擊,另外emoji字體表情庫應該使用base64_encode編碼,拿信息的時候base64_decode解碼即可。

相關文章:“i愛記賬” 小程序后端開發小結

相關組件:
wxParse:集成了emoji表情組件;
WxEmojiView-微信小程序Emoji展示輸入組件
純微信小程序 emoji解析組件

**相關demo: **
小程序學習用demo推薦:雨碎江南;emoji,評論(適用1221)

**相關討論1: **小程序Emoj解析 現在在采用Emoj這套組件開發 改裝后臺返回的表情數據 遇到個問題就是 循環出來的數據始終是一樣的 不知道還需要從哪兒修改.請大神指點

var WxEmoji = require('../../WxEmojiView/WxEmojiView.js');
  var  list = [{
      microblog_id: "274", //主微博ID
      sendUserInfo:{
        content: "數據1 ~![01][02]"
      }
  },{
      microblog_id: "274",
      sendUserInfo:{
        content: "數據2 ~![03][04]"
      }
  },{
      microblog_id: "274",
      sendUserInfo:{
        content: "數據3~![05][06]"
      }
  }];
//先將中括號替換為可解析的::
for(var i = 0;i<list.length;i++){
    var dt = list;
    var str = dt.sendUserInfo.content;
    // var str2 = str.replace(/[\[\]]/g,':');
    var str2 = str.replace(/\[([^\[\]]+)\]/g,':$1:');
    dt.sendUserInfo.content = str2;
}
Page({
    data:{
        list:""
    },
   onLoad: function(){
    var that = this;
    WxEmoji.bindThis(this);
    for(var i = 0;i<list.length;i++){
       WxEmoji.buildTextObjs(that,list.sendUserInfo.content);//使用生成文字
       list.sendUserInfo.content = "";//清空默認的原文字
    }
    that.setData({
       list:list
    });
  },
})

//模板文件循環

<block wx:for="{{list}}">
<view class="msg">
    <view class="ty flex-1">
      <view class="user_name">
        張三
        <text class="user_sex_level_male">21</text>
        <text class="time">剛剛</text>
      </view>
      <view class="user_apartment">
        天通北苑店
      </view>
    </view>
    <view class="ty user_msg mt0">
        <import src="../../WxEmojiView/WxEmojiView.wxml"/>
        <template is="WxEmojiView" data="{{WxEmojiObjs}}"/>
    </view>
</view>
</block>

回答者:Di 目前WxEmojiView我一直沒有更新,目前處于alpha0.1版本,所以不建議直接使用。
比較好的方案是,你從WxEmojiView的處理過程中借鑒并改造在你的小程序中,既然已經使用,那么問題定位 這個問題是因為我當時并沒有考慮多行使用的方案,所以我當時暴漏的時候沒有暴漏出相關多數據方法

WxEmoji.buildTextObjs(that,list.sendUserInfo.content);//使用生成文字

wxEmojiView的源碼中我只做了但數據處理,所以只會顯示最后一條數據,而且都是一樣的

function buildTextObjs(e,str){
  var temObjs = {};
  temObjs.WxEmojiTextArray = transEmojiStr(str);
  __this.setData({
    WxEmojiObjs:temObjs//這里直接返回了一個WxEmojiObjs
  });
}

解決方案 改造方法,是建立在你不是用其他功能的基礎上

//1.改造方法buildTextObjs
function buildTextObjs(e,str){
  var temObjs = {};
  temObjs.WxEmojiTextArray = transEmojiStr(str);
  return temObjs;
}
//2.使用方法
Page({
    data:{
        list:""
    },
   onLoad: function(){
    var that = this;
    WxEmoji.bindThis(this);
    for(var i = 0;i<list.length;i++){
       //改造這里
       list.sendUserInfo.content = WxEmoji.buildTextObjs(that,list.sendUserInfo.content);
    }
    that.setData({
       list:list
    });
  },
//3: 模版使用
<block wx:for="{{list}}">
<view class="msg">
    <view class="ty flex-1">
      <view class="user_name">
        張三
        <text class="user_sex_level_male">21</text>
        <text class="time">剛剛</text>
      </view>
      <view class="user_apartment">
        天通北苑店
      </view>
    </view>
    <view class="ty user_msg mt0">
        <import src="../../WxEmojiView/WxEmojiView.wxml"/>
        <template is="WxEmojiView" data="{{WxEmojiObjs:item.sendUserInfo.content}}"/>
    </view>
</view>
</block>

相關討論2:帶圖片的微信昵稱存數據庫亂碼或存不進去的解決辦法(作者:劉冰華)很多用戶的昵稱都帶有小圖標


如果將emoji表情直接存入utf8編碼的數據庫,會報錯,存不進去。因為編碼方式不同

解決方法:

存之前base64_encode(),取的時候base64_decode()


順道提醒:

存用戶昵稱時要考慮表情圖片這個因素,不一定===字符串字段編碼設置為utf8mb4之后,并沒有什么用,讀取顯示的時候都是一堆問號;

相關討論3:微信小程序無法發送的emoji表情在做一個聊天小程序,發言的時候需要發送輸入法中的emoji表情,但是在后端接收的時候收到的確實空字符串。不知道大家遇到過這樣的問題嗎?

需要從網上找一個js把emoji轉換成指定文字的庫然后從顯示端再轉換回來,這樣的話服務端需要做處理嗎?另外有什么好的js庫可以提供嗎? 這樣的話服務端可以不用處理了,因為編碼和反編碼都在前端進行了,庫github找找,我也沒用過,也是提供一個思路,不過我覺得一定是有這樣的庫的。

相關討論4: 我想請問一下各位在開發小程序的時候有遇到過獲取nickName昵稱時遇到有emoji表情時,存到數據庫emoji表情就變成了“???”這樣的情況嗎? 可以這個編碼,后臺識別編碼找表情.

解決方法:有個辦法可以解決,把數據格式blob類型儲存
我用個簡單方式解決你問題吧
1、String 轉 Blob: String content = "Hello World!"; Blob blob = Hibernate.createBlob(content.getBytes());
2、Blob 轉 String: Blob blob; try{ String content = new String(blob.getBytes((long)1, (int)blob.length())); } catch(SQLException e) { e.printStackTrace(); }

但存進服務器mysql就不行是的,因為你數據庫的varchar不支持這個字符,你這個字符有可能是一種三字節的數據你可以選擇把那些不規則的字符給過濾,但是這樣會缺斤少兩,不建議 我現在就是用過濾的,看上去就不全了,所以想看有什么方法能把它存起來,php+mysql那個emoji我通過php的json_encode,

,就變成那樣了,不知道怎么把他搞出來;如果我不存進數據庫,就是先用json_encode然后馬上用json_decode,返回微信顯示是正常的;但是存到數據庫之后拿出來json_decode也是有問題,就轉不回去了先用urlencode下,取出的時候用urldecode
這個可以,我剛才試了,base64_encode這個函數其實也是可以,這兩個其實會不會有什么兼容問題? 不會存在兼容問題,php高版本也支持

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,520評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,362評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,805評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,541評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,896評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,062評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,608評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,356評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,555評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,769評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,175評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,489評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,289評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,516評論 2 379

推薦閱讀更多精彩內容