Github : https://github.com/DowneyL/di...‘php
這個小程序是公司針對一個自家產品的需求,而這個產品就是 Discuz (我知道沒啥人用了,就不要吐槽了),版本是 X3.2 ,仍是 GBK 編碼!html
在公司給了需求,稍微學習了一下小程序,就直接開幹了,網上找到一個基礎版本(可恥的不全是本身寫的),修復了一些 BUG,新增了一部分功能,也砍掉了一部分功能,兼容了 GBK 版本的 Discuz,簡單設計了一下小程序的樣式,產品也就基本成型了。git
之因此分享出來,是由於關於 Discuz 相關的文檔、產品之類真的是太少了,想在一個平臺上記錄下來,若是遇見有緣人,沒準能給他一些收穫。 0.0\github
主要有如下幾點功能,須要記錄
file_get_content()
函數,在論壇上有可能沒法使用,已經在 inc.php 文件中實現相同功能的小程序
get_url_content()
函數。微信小程序
function get_url_content($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); # curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); if (!curl_exec($ch)) { error_log(curl_error($ch)); $data = ''; } else { $data = curl_multi_getcontent($ch); } curl_close($ch); return $data; }
因爲論壇總體格式爲 GBK,而和微信服務端交互,必須爲 UTF-8 編碼,因此對接口編碼進行了一部分的優化。api
輸出的狀況下,有 error.php 下的 array_iconv()
函數,來對輸出數組進行編碼的轉換。數組
static function array_iconv($str, $in_charset = "UTF-8", $out_charset = CHARSET) { if (is_array($str)) { foreach ($str as $k => $v) { $str[$k] = WmApiError::array_iconv($v, $in_charset, $out_charset); } return $str; } else { if (is_string($str)) { // return iconv('UTF-8', 'GBK//IGNORE', $str); return mb_convert_encoding($str, $out_charset, $in_charset); } else { return $str; } }
接受的狀況下, 有 inc.php 下的 getDataForCharset()
函數來整合接受編碼。服務器
function getDataForCharset($data) { return (CHARSET != 'UTF-8') ? dhtmlspecialchars(WmApiError::array_iconv($data)) : dhtmlspecialchars($data); }
wxParse 作的事情
get_url_content()
部分爲 file_get_content()
(生產環境可能因爲設置問題,致使如此怪異,請結合自身服務器來看)encodeURI()
再到論壇服務器上 urldecode()
最後進行 UTF8 -> GBK 的轉碼,固然,是有必要的狀況下。