注文管理画面で、例えば「山本」で検索し、山本さんの注文一覧を表示させたとします。
山本さんといっても目的の「山本 太郎」さんの他に「山本 次郎」さんや、「山本 花子」さんなども検索に引っ掛かってくる。
この一覧画面で、一番最初の山本さんの情報を見るには、問題ないのですが、2番目以降の山本さんをクリックした場合、「白紙の検索結果」画面が表示されてしまう。
対策前のURL
「山本」で検索した時の一覧のURLは、
http://www.zencart.com/admin/orders.php?search=%BB%B3%CB%DC
一覧から2つ目以降をクリックした時のURLは、
http://www.zencart.com/admin/orders.php?search=山本&page=1&oID=1013
search= 以下の文字列がURLエンコードされずにそのまま出力されてしまっています。
試しにURL内の「山本」を元の %BB%B3%CB%DC に置き換えてみると正しく動作します。
なので、この一覧ページ内のURLを組み立てているphpファイルを探して対応する変更をします。
html_output.php の処理
今回のエラーの原因は、日本語などのマルチバイト文字で検索した場合に一覧の2つ目以降の行のリンク先URLにマルチバイト文字列がURLエンコードされずに出力されているのが原因です。
/admin/includes/functions/html_output.php
のファイルを変更します。
変更前 : function zen_href_link 内の if ($parameters == ”) のところ..
<html_output.php 43行目あたり>
if ($parameters == ”) {
$link = $link . $page;
$separator = ‘?’;
} else {
$link = $link . $page . ‘?’ . $parameters;
$separator = ‘&’;
}
変更後 : else 内に以下のif文を追加します..
if ($parameters == ”) {
$link = $link . $page;
$separator = ‘?’;
} else {
/** ここから追加 **/
if ( $_GET[‘search’] ){
$parameters = str_replace($_GET[‘search’], urlencode($_GET[‘search’]), $parameters);
}
/** ここまで追加 **/
$link = $link . $page . ‘?’ . $parameters;
$separator = ‘&’;
}