去年在使用Drupal 6的时候,就发现用Pathauto自动生成的URL网站中,部分特殊字符会导致页面找不到,当时找到了解决办法,记录在这篇博文中《Drupal的Pathauto模块生成带有单引号、双引号、反斜杠URL问题及解决》。
最近在使用Drupal 7的时候又遇到类似问题,这次不是单引号、双引号或者反斜杠,而是+(加号)和&(and符号)出了问题,自动的编码变成了%2B和%26,在浏览器中无法找到。如果手工修改为%252B和%2526则可以访问。
我在网上搜索了很多资料,找到Drupal 6的includes/common.inc中有个函数drupal_urlencode,在对应的Drupal 7中改为了函数drupal_encode_path,函数的具体内容也有所不同,我对Drupal 7的common.inc(应该可以不改这个core文件而是改自定义目录下的文件,但我还没有试用成功)做了点修改后可以解决:
/*
jamesqi 2012-2-29 use drupal6 drupal_urlencode
function drupal_encode_path($path) {
return str_replace('%2F', '/', rawurlencode($path));
}
*/
function drupal_encode_path($path) {
if (variable_get('clean_url', '0')) {
return str_replace(array('%2F', '%26', '%23', '//','%2B'),
array('/', '%2526', '%2523', '/%252F','%252B'),
rawurlencode($path));
}
else {
return str_replace('%2F', '/', rawurlencode($path));
}
}
也许有更好的解决办法,我暂时还不知道,先把这个解决办法记录下来。页面例子:
补充:上面的例子已经失效,我更改了网站设置,没有在上面的站上继续用pathauto
评论1
谢谢
谢谢!