当我使用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" ] );
答案 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个字符,则试图缩短字符串的长度也破坏了它。