前一阵子导入的美国企业名录中有不少标题都带有单引号,例如:A J's Ribs A-Go-Go,用Drupal中的Pathauto模块生成的URL为:
http://ak.mingluji.com/business_directory/A_J%27s_Ribs_A-Go-Go
可我却无法打开这个页面,报错page not found。我让同事专门把Pathauto设置中的各种字符都测试了一遍,单引号、双引号、反斜杠这3种无法正常显示,而其他的几十个(例如逗号、中括号、分号、句号等)都是正常的。好像这三个字符在转义符号中比较特别。
有打开dev模块查看报错页面的数据库查询情况,发现这3个字符有时经过了两次转义,不知道怎么多出了一次,结果就找不到了。我自己对php、MySQL了解得并不多,写了封邮件询问网上的一位曾经给我推荐Drupal的朋友Nanyang Zhan,没想到很快就有答复,然后不断沟通了几个来回,终于是把问题解决了,我在path.inc中添加了3行来处理3个符号:
if (!isset($map[$path_language]) || !($src = array_search($path,
$map[$path_language]))) {
// Get the most fitting result falling back with alias without language$path=str_replace("\\\"","\"",$path); //处理双引号
$path=str_replace('\\\'','\'',$path); //处理单引号
$path=str_replace("\\\\","\\",$path); //处理反斜杠if ($src = db_result(db_query("SELECT src FROM {url_alias}
WHERE dst = '%s' AND language IN('%s', '') ORDER BY language DESC, pid
DESC", $path, $path_language))) {
$map[$path_language][$src] = $path;
}
经过这3行把重复转义的字符还原了,已经可以看到包含这3种字符的正常的页面了,太好了,实在非常感谢Nanyang,回信的速度比我问的还要快!
不过这个问题确实有些奇怪,Nanyang的机器上安装的drupal和pathauto与我一样的版本却根本就没有问题。现在也不深究了,解决了就好。
评论