linux utf8转换为gbk6,UTF-8和GBK之间的转换 | Think in Drupal

在处理支付宝示例代码时遇到GBK编码导致的乱码问题。通过分析发现charset_encode函数在处理从Drupal读取的字符串时产生乱码。解决方案是将模块转为GBK编码或反转charset_encode函数,保持UTF-8格式。同时,学习了PHP的mb_convert_encoding和iconv函数用于编码转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

支付宝给出来的示例代码,里面采用的是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中编码之间是如何转换的了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值