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 的转码,固然,是有必要的状况下。