php json_encode()显示带有阿拉伯字符的null

时间:2016-07-29 17:29:42

标签: php arrays json

当我使用json_encode()打印数组时,它不会显示阿拉伯语用户名,我该怎么做才能正确显示这些用户名?

$cnx = mysqli_connect( "localhost", "root", "pass", "databasename" );
$data = mysqli_query( $cnx, "SELECT userid,username FROM user" );
$getalluser = array();
while ( $row = mysqli_fetch_array( $data ) )
  $getalluser[] = array( $row[ "username" ],
                         "http://localhost/test/image.php?u=" . $row[ "userid" ],
                         $row[ "username" ] );
echo json_encode($getalluser); 

当我使用befor查询时

mysql_query("SET NAMES 'utf8'");

结果显示为\u00ca\u00c7\u00e3\u00d1

我正在使用PHP 5.2

目前的解决方案是,使用iconv()

   $users[] = array( iconv('windows-1256', 'utf-8', ($row[ "username" ])),
                         "http://localhost/386/image.php?u=" . $row[ "userid" ],
                         iconv('windows-1256', 'utf-8', ($row[ "username" ] );

2 个答案:

答案 0 :(得分:0)

尝试在控制台中更改数据库:

ALTER TABLE 'user' MODIFY 'username' VARCHAR(32) CHARACTER SET utf8;
varchar()函数中的

设置自定义字符长度。

然后在你的PHP开头所有:

header('Content-Type: text/html; charset=utf-8');

这应该有效。

答案 1 :(得分:0)

我知道这很旧了,但是我遇到了一个非常相似的问题,我尝试将所有页面上的UTF8设置为我的ucfirst,将数据库设置为连接数据库,但没有任何效果。

我终于发现我在字符串上使用json_encode,并且某些字符无法转换,这反过来又破坏了我尝试substr的数组。

我还使用了tidyverse,如果它超过60个字符,则试图缩短字符串的长度也破坏了它。