1

クエリ文字列を生成しようとしています。関数は非 utf8 文字に対して機能しますが、utf8 文字は空白として表示されます。

関数

function qs_search($qs) {
  parse_str($_SERVER['QUERY_STRING'], $query_string);
  $query_string['search'] = basename($qs);
  return http_build_query($query_string);
}

これらは結果です...

qs_search('通常');

index.php?list&search=regular

qs_search('Синодальный');

index.php?list&search=
4

1 に答える 1

3

コメントによると、なぜあなたが を使用しているのかはまだわかりませんbasenameが、使用set_localeは PHP 5.2 以降で機能します。

<?php
    function qs_search($qs) {
        $query_string = array();
        $query_string['search'] = basename($qs);
        return http_build_query($query_string);
    }
    setlocale(LC_ALL, "en_US.UTF8");
    var_dump(qs_search("regular"));
    var_dump(qs_search("Синодальный"));
?>

前述のとおり、これはPHP 5.0.0 ~ 5.1.6 では機能しません。クリックして結果を表示します。

編集

どうやら Drupal の開発者は同じ問題を抱えていて、このバグのために独自のbasename関数を作成したようで、PHP 5.0.0 - 5.1.6 の問題を解決するはずです。

于 2012-11-08T17:03:24.770 に答える