2012-11-08 131 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