当前位置

Drupal 7的URL中+加号、&符号的编码问题及解决

James Qi 在 2012年3月1日 - 23:46 提交
内容摘要:去年在使用Drupal 6的时候,就发现用Pathauto自动生成的URL网站中,部分特殊字符会导致页面找不到,当时找到了解决办法,记录在这篇博文中《Drupal的Pathauto模块生成带有单引号、......

  去年在使用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

自由标签:

评论