博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux utf8转换为gbk6,UTF-8和GBK之间的转换 | Think in Drupal
阅读量:4964 次
发布时间:2019-06-12

本文共 1339 字,大约阅读时间需要 4 分钟。

支付宝给出来的示例代码,里面采用的是GBK编码,使用Zend Studio打开以后中文全是乱码.我先是用写字板打开,然后拷贝到记事本中,然后再拷贝到Zend Studio中,这样就实现了将原有代码拷贝过来.

我是直接使用的原有代码,包括各种函数,都是示例代码中所给的,所以遇到的第一个问题就是乱码问题.我仔细的都了源码,按照计算机执行的顺序,一步步往下读,发现了一个问题:

function charset_encode($input,$_output_charset ,$_input_charset ="GBK" ) {

$output = "";

if(!isset($_output_charset) )$_output_charset  = $this->parameter['_input_charset '];

if($_input_charset == $_output_charset || $input ==null) {

$output = $input;

} elseif (function_exists("mb_convert_encoding")){

$output = mb_convert_encoding($input,$_output_charset,$_input_charset);

} elseif(function_exists("iconv")) {

$output = iconv($_input_charset,$_output_charset,$input);

} else die("sorry, you have no libs support for charset change.");

return $output;

}

就是这个函数,找到它以后,在最后一句设置了一个断点,使用Zend Studio进行debug,在这里我发现了,我从drupal中读取出来的字符串,经过这个函数处理以后,就变成了乱码了。

这个发现虽然很小,但是找到了问题的所在。我把整个模块文件改造成了GBK编码,传递到支付宝的字符串恢复了正常,但是模块在后台中的配置出现了乱码。但是我发现,在模块中,使用t函数,里面使用英文,然后再翻译成中文的方式可以解决这个后台问题。而在这个时候,我对从drupal中传到这个模块的字符串作了处理,charset_encode,就是使用的这个函数。那么现在整个问题就解决了,我只需要使用GBK编码的形式来编写这个模块就可以了。而对从drupal中传递到这个模块中的数据作一次转换。

但是觉得这种方式,不够地道,因为drupal中,所有的模块都是采用UTF-8的格式,如果我的模块采用GBK的话,有点别扭。

我很快想到了,如果模块本身采用UTF-8格式,我只需要反转一下函数charset_encode就可以了,两者之间是对称的。所以我决定,模块本身仍然采用UTF-8的形式。

尽管没有采用GBK的形式,但是中间的替换过程没有白费,因为它至少证明了问题时可解得,而且找到了解决的办法。

当然,这个时候还学习了mb_convert_encoding和iconv这两个函数,也算知道PHP中编码之间是如何转换的了。

转载地址:http://vrqhp.baihongyu.com/

你可能感兴趣的文章
IE8 CSS样式兼容性清单
查看>>
HDU2732 最大流
查看>>
pycharm 使用print不打印结果问题解决
查看>>
css进阶
查看>>
『分块算法初步』
查看>>
『扩欧简单运用』
查看>>
QTP教程入门到高级(转)
查看>>
机器学习基石HOW BETTER部分(3)
查看>>
BZOJ 1010: [HNOI2008]玩具装箱toy | 单调队列优化DP
查看>>
3D打印机如何添加自动调平功能
查看>>
iOS开发之 第三方字体的应用
查看>>
Executor框架的简要分析
查看>>
C++实现获取本机机器名及外网IP代码
查看>>
Uncaught TypeError: Illegal invocation
查看>>
只有高中学历的我是怎样加入谷歌的?
查看>>
MySQL的安装和启动
查看>>
hdu 1020 Encoding
查看>>
hdu 4006 The kth great number(优先队列)
查看>>
JDBC连接MySQL数据库
查看>>
一般算数表达式转换为“后缀式”
查看>>