众所周之,"/"在大多数语言中都用来作为转义符(至少我接触到的语言都是这样的,不知道有没有其它语言不是用"/"作转义符的^_^),而最近在使用Perl连MySQL数据库做网页开发时,碰到了这样一些问题.
1.在MySQL数据库中,对于"/"的转换,在插入、更新数据和在查询时是不一样的,在插入和更新数据时我们只需要把一个”/"转成两个就可以了,而在做查询时需要把一个“/“转成四个。在Perl中我们可以这样写:
$strRet =~ s/g;
$strRet =~ s/g;
2.第二个问题是Perl语言对“/”的转换和日本语文字带来的问题。
“/“在ASCII表中16进制为5C。在日本语文字中有以下一些字带有5C,
― | ソ | Ы | 噂 | 浬 | 欺 | 圭 | 構 | 蚕 | 十 | 申 | 曾 | 箪 | 貼 | 能 | 表 | 暴 | 予 | 禄 | |
兔 | 喀 | 媾 | 彌 | 拿 | 杤 | 歃 | 濬 | 畚 | 秉 | 綵 | 臀 | 藹 | 觸 | 軆 | 鐔 | 饅 | 鷭 |
本来这还没有什么,不过一到Perl中,问题就来了,在Perl中使用(~ s/g)或(~ s/g )进行转换时是按字节进行转换的,那么不就是以上包含“5C”的汉字都被转换了吗?这可不是我们想要的结果。我采用了一种很苯拙的解决方法,先把“/“转换,在把这四十个汉字后多余的”/“去掉。如:
$strRet =~ s/g;
$strRet =~ s/―/―//g;
在http://www.shtml.jp/mojibake/sjis_cgi.html给了我们很多解决方法,不过是日文的。