前一陣子導入的美國企業名錄中有不少标題都帶有單引号,例如: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與我一樣的版本卻根本就沒有問題。現在也不深究了,解決了就好。
评论