PHP数组编码变换

Jun 13, 2016 pm 12:55 PM
charset export gbk iconv

PHP数组编码转换
因为一些特殊字符的显示效果的原因不得不把习惯的utf-8工程改成了GBK,由于使用了ajax技术,又涉及到了老问题――编码转换。

一些表单验证需要返回json数据,php的json_encode函数只支持utf-8编码,无奈只得iconv了,需要达到的效果是GBK数组转换成utf-8数组传给json_encode函数。

最开始的思路,将数组序列化后用iconv函数转换编码,之后再反序列化,代码如下:

unserialize(iconv('gbk','utf-8',serialize($array)));  
Salin selepas log masuk

得到的结果是空白,后来想起来配置文件里设置了默认编码 ini_set('default_charset', 'gbk');   这样用gbk反序列化utf-8的字符串肯定不好用了,此处在序列化和反序列化之间加个ini_set('default_charset', 'utf-8'); 应该也是可以的,但这么弄总觉得有点别扭,因为是全局的编码设置,很容易导致其他地方的编码问题,比如数据库操作。那么换个思路,用构建数组原型的序列化方法,借助var_export函数,最终函数如下:

function array_iconv($in_charset,$out_charset,$arr){  
        return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));  
}  
Salin selepas log masuk

原理很简单 var_export设置第二个参数为true,返回数组原型字符串,将字符串转换为utf-8编码,之后再用eval来执行返回(类似匿名函数?),至此完美解决问题。

后续:后来在网上搜了下资料,看有没有更好的方法,找到的都大同小异,都是利用递归调用iconv的方式,如果数组元素过多或者维数多一些,性能上肯定不怎么样了,更好的是原生代码的方式,不需要考虑是N维数组还是关联数组,一切都已经自动完成,保证数组转换前后数据一致。从代码的长短以及循环和原生方法的比较上,相信大家已经有了选择。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Analisis pengekodan bahasa Go: Perbandingan UTF-8 dan GBK Analisis pengekodan bahasa Go: Perbandingan UTF-8 dan GBK Mar 28, 2024 pm 01:54 PM

Analisis pengekodan bahasa Go: Perbandingan UTF-8 dan GBK

'Modul yang diminta tidak menyediakan eksport bernama' Ralat muncul dalam Vue Cli - bagaimana untuk menyelesaikannya? 'Modul yang diminta tidak menyediakan eksport bernama' Ralat muncul dalam Vue Cli - bagaimana untuk menyelesaikannya? Aug 20, 2023 pm 07:25 PM

'Modul yang diminta tidak menyediakan eksport bernama' Ralat muncul dalam Vue Cli - bagaimana untuk menyelesaikannya?

Fungsi penting yang disyorkan untuk pemprosesan bahasa Cina: Penjelasan terperinci tentang fungsi iconv PHP Fungsi penting yang disyorkan untuk pemprosesan bahasa Cina: Penjelasan terperinci tentang fungsi iconv PHP Jun 27, 2023 pm 02:04 PM

Fungsi penting yang disyorkan untuk pemprosesan bahasa Cina: Penjelasan terperinci tentang fungsi iconv PHP

Pengenalan kepada arahan iconv di bawah CentOS Pengenalan kepada arahan iconv di bawah CentOS Dec 29, 2023 pm 07:52 PM

Pengenalan kepada arahan iconv di bawah CentOS

Perbezaan antara eksport dan eksport lalai Perbezaan antara eksport dan eksport lalai Oct 12, 2023 am 10:24 AM

Perbezaan antara eksport dan eksport lalai

Bagaimana untuk mengeksport fail excel menggunakan kaedah eksport dalam java Bagaimana untuk mengeksport fail excel menggunakan kaedah eksport dalam java Apr 27, 2023 pm 08:43 PM

Bagaimana untuk mengeksport fail excel menggunakan kaedah eksport dalam java

[Disyorkan] Kaedah biasa untuk mengkonfigurasi pembolehubah persekitaran Linux! [Disyorkan] Kaedah biasa untuk mengkonfigurasi pembolehubah persekitaran Linux! Feb 19, 2024 pm 01:06 PM

[Disyorkan] Kaedah biasa untuk mengkonfigurasi pembolehubah persekitaran Linux!

PHP menukar vektor pengekodan aksara dalam fon PHP menukar vektor pengekodan aksara dalam fon Mar 21, 2024 pm 03:11 PM

PHP menukar vektor pengekodan aksara dalam fon

See all articles