卧龙的朋友叫卧槽

少不争气做程序,两载矣,未见琼楼玉宇。几兆不值三两文,轻声语,莫惊道上高人。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

几个php常用路径函数对编码的转换

Posted on 2013-03-23 17:39  卧龙的朋友叫卧槽  阅读(469)  评论(0)    收藏  举报

最近编写一个小功能接口的时候出现了一点小插曲。因为我是要用PHP从本地查找本批次ipa包,并解析信息,发送到远端服务器。

一、zip_open() 对中文文件路径,需要转换成 gb2312 再打开,不然会

 1 // $ipa_file 如果含有中文,需要转换成gb2312编码,不然zip_read会报错
 2 if(! $handle = zip_open($ipa_file)) return FALSE;
 3         while($read_handle = zip_read($handle))
 4         {
 5             if(zip_entry_name($read_handle) === 'iTunesMetadata.plist')
 6             {
 7                 if(zip_entry_open($handle, $read_handle, 'r'))
 8                 {
 9                     $plist = zip_entry_read($read_handle, '10240');
10                     if(! preg_match('#<key>itemId</key>\s*<integer>(\d+)</integer>#', $plist, $matches)) return FALSE;
11                     return $matches[1];
12                     zip_close($handle);
13                     continue;
14                 }
15                 else
16                 {
17                     return FALSE;
18                 }
19             }
20         }

 

二、glob() 取得的数组中,值有中文则是当前文件编码,没有则ASCII

首先我从本地用 glob 函数查找压缩包。检测得到编码输出如下(我文件编码是UTF-8):

D:\Downloads\ipa\update\Wikihood + 1.3.3.ipa   |   ASCII
D:\Downloads\ipa\update\iShredder 2.1.ipa   |   ASCII
D:\Downloads\ipa\update\南都周刊 1.1.ipa   |   UTF-8
D:\Downloads\ipa\update\生理节律 3.7.ipa   |   UTF-8
D:\Downloads\ipa\update\阅客 1.0.ipa   |   UTF-8

*所以glob()得到的路径,给zip_open已经不需要转编码到gb2312了。

我只需要这些.ipa的plist文件信息,和这个文件名作为一个数组POST出去。

三、basename()  此函数有中文路径则是当前编码(UTF-8), 没有则ASCII,

但不解的是在POST前仍要把数组元素往UTF-8转换一次,不然远端收到乱码,

$ipa_name = mb_convert_encoding(basename($ipa_file), 'UTF-8', 'gb2312');  
// ……
$datas = serialize($ipa_name);

我的文件编码和页面输出是UTF-8, 如此便正常了。