2012-11-08 130 views
1

我想生成一個查詢字符串。該函數適用於非utf8字符,但utf8字符顯示爲空白。php查詢字符串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= 
+0

試試看做'utf8_decode(basename($ qa))'或'utf8_encode(basename($ qa))'。 – h2ooooooo

+0

我以爲'basename()'是用於路徑...要返回**路徑的基本名稱** ... – shadyyx

+0

@ h2ooooooo這沒有奏效。 – user1766306

回答

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("Синодальный")); 
?> 

As stated, this will NOT work on PHP 5.0.0 - 5.1.6. Click to see results.

編輯

顯然Drupal的開發者有同樣的問題並創建了their own basename function因爲this bug,並應該解決您的問題在PHP 5.0.0 - 5.1.6。

+0

解決了我的問題'setlocale(LC_ALL,「en_US.UTF8」);'謝謝:) – user1766306

+0

@ user1766306您應該編輯您的apache/PHP配置以使用此語言環境,但要確保它在整個網站中都被使用if它是UTF8。 – h2ooooooo