問題
我做了微信分享,各種配置都ok,安卓實現分享,但是ios分享不顯示圖片和簡介 。(如下圖)
解決過程
經過一天的折騰,核對各種問題最終發現問題所在。是我的url中帶有漢字使用escape()進行的加密,蘋果分享的時候會自動的對(漢字)解碼decodeURIComponent()造成了url簽名錯誤。
http://adminpc.z1mei.com/Admin/TLogin?ref=/htmls/TraceOne/TraceCameraLive.html?name=%E7%AE%80%E4%BB%8B&id=166&word=7B928D5BFFD7FE508CCCAFC73F2B52EB2
解決辦法是,在打開要分享的頁面的時候,使用encodeURIComponent()對漢字進行加密,就可以了。
補充說明
我在獲取urll參數的時候使用的了getUrlParam()這個js方法。這里方法網上有一堆,比較老,在獲取參數的同時使用了unescope()對參數進行了解碼。目前來說escape() http://www.w3school.com.cn/ 都不在推薦使用了。具體代替為encodeURIComponent();
getUrlParam()我的升級代碼
function getUrlParam(name,fnDecode) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //構造一個含有目標參數的正則表達式對象 var r = window.location.search.substr(1).match(reg); //匹配目標參數 if (r != null) { if (typeof fnDecode === "function") { return fnDecode(r[2]); } return unescape(r[2]); } return null; //返回參數值 }
url的三個js編碼函數escape(),encodeURI(),encodeURIComponent()
escape()不能直接用於URL編碼,它的真正作用是返回一個字符的Unicode編碼值。比如"春節"的返回結果是%u6625%u8282,,escape()不對"+"編碼 主要用於漢字編碼,現在已經不提倡使用。
encodeURI()是Javascript中真正用來對URL編碼的函數。 編碼整個url地址,但對特殊含義的符號"; / ? : @ & = + $ , #",也不進行編碼。對應的解碼函數是:decodeURI()。
encodeURIComponent() 能編碼"; / ? : @ & = + $ , #"這些特殊字符。對應的解碼函數是decodeURIComponent()。
假如要傳遞帶&符號的網址,所以用encodeURIComponent()
參考資料(加粗為重要的資料)
https://blog.csdn.net/angle_lzc/article/details/84864455
https://blog.csdn.net/weixin_34310127/article/details/87616016
https://www.cnblogs.com/huaxingtianxia/p/7125862.html
https://www.oschina.net/question/2600088_2189362?sort=time
http://www.w3school.com.cn/jsref/jsref_escape.asp