# 按拼音排序TAG

LooPo, PHP @ 27 April 2006

在解决乐铺的 tag 排序的问题上,碰到一点麻烦。原因出在乐铺的所有 tag 列表页:http://www.loopo.cn/tags/

刚开始是按照 tag 数量的多少排序的,这样最简单,不过缺点就是没有“公平对待”每一个 tag,特别是用了 tag 云状显示结构以后,最大的 tag 在前面,最小的在后面,看起来很不舒服。

后台改成了按 tag 的 name 排序,在数据库中是直接 ORDER BY tagname 操作的,这里又体现出来了汉字的“优点”,英文里面,只要 order by 一下就会按 a-z 的顺序列出来了,汉字可不行,这样做顺序是打乱了,显示的效果也好一些了,不过缺点也显而易见:没有规律性。想找一个特定的tag比较困难。

再后台想到了按汉字的拼音排序的想法,搜索了一下,之前有收藏过一个函数可以把汉字转换为拼音的,原理是通过判断区位码的方法来实现简单的拼音转换的。在本地简单测试了一下,正要往上用的时候,又有麻烦了,原来这个转换是从gb2312到拼音的,乐铺上的用的编码是utf8格式的,死活转不过去。还好服务器有支持iconv函数,又通过 iconv 转换了一次,这才正常。

使用过程中发现存在的几点问题:

  • 1.有很多生僻字都不能正确转换,好像只有国标里的汉字才可以;
  • 2.多音字处理不好,有时候转换出来的拼音莫名其妙。

上面两点问题在应用中用其它办法弥补一下就可以了,等有更好的解决办法再说吧。嘿嘿!

补充:后来在PHPCLASS发现了一个更强大的类,Chinese Text Conversion,乐铺现在用的就是这个类。有兴趣的朋友可以下来研究一下。

Tags: , ,

6 Responses to “按拼音排序TAG”

  1. gavin Says:

    不谋而合。这个问题我也是这么办的。
    但你提供了Chinese Text Conversion,可让我接下来少走弯路啦。谢谢。

  2. gavin Says:

    这个类对生僻字的转换还是不行,都乱码了。

  3. gavin Says:

    还有多音字也不行。
    “音乐”->yin le。
    你后来解决了吗

  4. avenger Says:

    多音字的问题简单通过一个类是很难处理的,所以乐铺现在用的是自动加人工的办法。

  5. hang Says:

    你的LOOPO很不错,关注中。
    想请教一下“您或者同样会喜欢以下物品”的实现原理是什么?是通过一个标签互相引用的算法吗?还是有其他什么好的方法。

  6. avenger Says:

    to hang:
    正如你所想,loopo现在是通过随机展示相同tag的物品来实现相关推荐的。
    如果您有更好的想法,欢迎讨论。

Leave a Reply