在javascript中使用json的特殊字符

时间:2017-08-07 13:42:11

标签: php mysql json

我试图获取数据库中的数据并在json中显示它们。但是带有重音的词语会出现如下:\ u00f3。

我的代码是这样的: cidadeDao.php

<?php

class CidadeDAO {
    private $conexao;

    public function __construct() {
        $this->conexao = new Conexao();
    }

    public function consultarTodos() {

       // mysql_set_charset('utf8');
        $sql = "SELECT * FROM cidade";

        $resultado = mysqli_query($this->conexao->getCon(), $sql);

        return $resultado;
    }

}

?>

cidade.php

<?php

header("Content-Type: text/html; charset=UTF-8",true);

include '../Classes/Conexao.php';
include '../Classes/DAO/cidadeDao.php';

$cidadeDao = new cidadeDao();

$consulta = $cidadeDao->consultarTodos();

    for ($i = 0; $i < mysqli_num_rows($consulta); $i++){
        $linha = mysqli_fetch_array($consulta);

        $respostas [] = array (
            'id' => $linha['id'],
            'id_uf' => $linha['id_uf'],
            'cidade' => utf8_encode($linha['cidade'])
        );
    }

echo json_encode($respostas);
?>

当我检查生成的json时,它看起来像这样:

[{"id":"1","id_uf":"1","cidade":"Sorocaba"},
{"id":"2","id_uf":"5","cidade":"Niter\u00f3i"},
{"id":"3","id_uf":"1","cidade":"Tatui"},
{"id":"4","id_uf":"1","cidade":"Itu"}]

有人能帮助我吗?

如何在php中处理带重音符和特殊字符的单词?

3 个答案:

答案 0 :(得分:1)

  • 您应该使用每个文件顶部的DELETE FROM table WHERE CONCAT(id1, id2) IN (SELECT CONCAT(CONCAT(id1,"-"), id2) FROM raw_table) 函数和紧随其后的mb_internal_encoding()函数。

  • 您的数据库和表格需要设置为the mb_http_output()字符集和整理。

  • 要保存到数据库,请使用htmlentities并按照此utf8mb4

  • 精简UTF-8

并且您必须添加它以访问mysqli的数据库:

htmlentities( $yourdata, ENT_QUOTES | ENT_HTML5, $encoding = 'UTF-8' );

在此处阅读 - 以正确的方式使用UTF-8,FROM PHP。 http://www.phptherightway.com/#php_and_utf8

  • 它解释了如何在PHP级别,数据库级别和浏览器级别以正确的方式使用UTF-8。

答案 1 :(得分:0)

这就是JSON的出现方式,但是一旦你使用你正在使用的任何东西解码它就会显得很好。因此Niter\u00f3i在JSON中会显示为Niterói,但一旦JSON Decode,它就会显示为普通字符串 CREATE TABLE emailAddrs(email VARCHAR(255)); ... +------------+ | email | +------------+ | NULL | | NULL | | NULL | | some@email | | NULL | | NULL | +------------+

答案 2 :(得分:0)

来自PHP Manual page on JSON Constants(你真的应该从那里开始)

JSON_UNESCAPED_UNICODE

  

从字面上对多字节Unicode字符进行编码(默认为以\ uXXXX转义)。从PHP 5.4.0开始提供。

所以

json_encode('Niterói', JSON_UNESCAPED_UNICODE);

http://php.net/manual/en/function.json-encode.php

修改:另请参阅评论,原因是此方法可能存在问题(实际上违反了针对JSON的RFC)。