UTF8字符串转换拼音
Blogger的传统模板不支持边侧栏的日志分类功能,这两天我忙着写代码来实现这个一功能。目前你已经可以看到用美味书签(delicious.com)制作的“标签云”(注:有国内的朋友反映,美味书签打开的速度很慢,估计是国内对delicious.com的过滤造成的)。其他日志分类功能也快要开发完成了,我采用的方法是在Linux操作系统上用PHP产生HTML代码然后上传到服务器,这样就免除在国内用户访问滞后的问题。估计明天可以把这个功能加上,到时再做详细介绍。这个帖子主要将介绍我在开发中碰到的编码问题:因为我的日志分类标签有用中文命名的,例如“浏览器”。如果我把“浏览器”标签的帖子放在一起,命名为“浏览器.html”,然后在链接里用“/blog/category/浏览器.html”,应该也是可以的。但是如果文件用中文命名,要想把文件从Linux系统里用WinSCP下载到本地是行不通的,原因是WinSCP不支持中文文件名。我没有花太多时间去研究是否可以更改WinSCP的编码设置来修正这个问题;而且我本来就不爱用中文来命名html文件,总觉得把中文放在地址栏有点怪怪的,所以我就想用别的方法来解决这个问题。
开始想到的是用urlencode函数,例如:
$string = urlencode("浏览器");//编码后 $string = "%e6%b5%8f%e8%a7%88%e5%99%a8"
可是这个方法行不通,虽然url编码后链接是不含中文的,但是当你点击它后,它又会被转回中文,因为文件名也已经使用了url编码,所以这时它已经找不到以中文命名的文件了。
后来想到用拼音来代替中文字符,上网Google了下,找到了一些中文字符转换拼音的PHP库,但大多数是支持GB转拼音。因为我的系统用的是UTF-8,所以需要先把字符的编码转换一下:
$string="博客"return iconv('UTF-8', 'GB2312', $string); //得到GB2312编码
此外,我的确还找到一个支持UTF8转换拼音的PHP代码。使用方法很简单,先点击这里下载py.php(注:不知道原作者是谁,如果谁知道请来信告知,我会把出处补上。)然后调用文件里的Pinyin函数即可。值得注意的是,它不支持大写的英文字母,比如字符串含有大写英文字母,转换后大写英文字母会丢失。因此在转换之前,要先把字符串小写化。具体调用代码如下:
<?phprequire('py.php');$newtag = Pinyin(strtolower($tag),1);/*注意:1.$tag可以是中文,也可以是英文,但是因为字母必须小写,所以用到strtolower函数2.因为我的系统用的是UTF-8编码,所以调用Pinyin函数的是,加入了'1'为第二个参数;如果你的系统是GB编码的,调用的时候,则不需要这个参数。*/
?>
更新(2/23/09): 谢谢匿名网友的提示, 在py.php里,把下面这行改下,就支持大写字母了。
正则是我的强项:-)按道理不应该不知道的,哈哈,没有认真读代码 :-(return preg_replace("/[^a-z0-9]*/", '', $_Res);//这里$_Res是转换好的字符串,使用preg_replace,把不是a-z以及不是数字的字符过滤,//这么一来把那些大写字母也过滤了。因此把替换正则表达式如下更改一下就可以保留大写字母了。return preg_replace("/[^a-zA-Z0-9]*/", '', $_Res);
标签: PHP



2 条评论:
只需要修改一行代码就可以支持英文大写了
return preg_replace("/[^a-zA-Z0-9]*/", '', $_Res);
作者
Anonymous, 时间
2009年2月23日 上午5:21
是这样的,已经更新。谢谢!
作者
Adam, 时间
2009年2月23日 下午9:23
发表评论
指向此帖子的链接: