php – UTF-8中的值在JSON中被编码为NULL

前端之家收集整理的这篇文章主要介绍了php – UTF-8中的值在JSON中被编码为NULL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一组通过 JSON传递的关键字(编码的UTF-8),其中一些可能具有é,è,ç等特殊字符.这是用作自动完成器的一部分.例:
array('Coffee','Cappuccino','Café');

我应该补充说,它来自数据库的数组将是:

array('Coffee','Café');

但JSON编码为:

["coffee","cappuccino",null];

如果我通过print_r()打印这些文件,它们会在UTF-8编码的网页上显示出来,但如果要使用print_r($array)查看数组,则使用“café” ;出口();.

如果我在编码JSON之前使用utf8_encode()进行编码,那么它会很好,但在网页上打印的内容是“café”而不是“café”.

也很奇怪,但是json_last_error()被看作是一个未定义的函数,但json_decode()和json_encode()可以正常工作.

关于如何从数据库获取UTF-8编码数据的任何想法在整个过程中表现相同?

EIDT:这是获取关键字并使其成为单个数组的PHP函数

private function get_keywords() 
{
    global $db,$json;

    $output = array();

    $db->query("SELECT keywords FROM listings");

    while ($r = $db->get_array())
    {
        $split = explode(",",$r['keywords']);

        foreach ($split as $s)
        {
            $s = trim($s);
            if ($s != "" && !in_array($s,$output)) $output[] = strtolower($s);
        }
    }

    $json->echo_json($output);
}

json :: echo_json方法只是编码,设置标题并打印它(用于Prototype)

编辑:数据库连接方式:

function connect()
{

    if ($this->set['sql_connect'])
    {
        $this->connection = @MysqL_connect( $this->set['sql_host'],$this->set['sql_user'],$this->set['sql_pass'])
                OR $this->debug( "Connection Error",MysqL_errno() .": ". MysqL_error());
        $this->db = @MysqL_select_db( $this->set['sql_name'],$this->connection)
                OR $this->debug( "Database Error","Cannot Select Database '". $this->set['sql_name'] ."'");

        $this->is_connected = TRUE;
    }

    return TRUE;
}

更多更新:
简单的PHP脚本我跑了:

echo json_encode( array("Café") ); // ["Caf\u00e9"]
echo json_encode( array("Café") ); // null
原因可能是当前的客户端字符设置.一个简单的解决方案可能是设置客户端
MysqL_query(‘SET CHARACTER SET utf8’)
运行SELECT查询之前.

更新(2014年6月)

PHP 5.5.0起,MysqL扩展名已被弃用.现在建议使用MysqLi.另外,进一步阅读 – 应该避免上述设置客户端的方法for reasons including security.

我没有测试,但这应该是一个好的替代品:

$MysqLi = new MysqLi("localhost","my_user","my_password","my_db");
if (!$MysqLi->set_charset('utf8')) {
    printf("Error loading character set utf8: %s\n",$MysqLi->error);
} else {
    printf("Current character set: %s\n",$MysqLi->character_set_name());
}

或使用连接参数:

$conn = MysqLi_connect("localhost","my_db");
if (!MysqLi_set_charset($conn,"utf8")) {
    # TODO - Error: Unable to set the character set
    exit;
}

猜你在找的PHP相关文章