Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中带有json的特殊字符_Php_Mysql_Json - Fatal编程技术网

php中带有json的特殊字符

php中带有json的特殊字符,php,mysql,json,Php,Mysql,Json,我试图获取数据库中的数据并用json显示它们。但是有口音的单词是这样出现的:\u00f3 我的代码如下: cidadeDao.php <?php class CidadeDAO { private $conexao; public function __construct() { $this->conexao = new Conexao(); } public function consultarTodos() {

我试图获取数据库中的数据并用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;
    }

}

?>
有人能帮我吗


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

JSON就是这样显示的,但是,一旦您使用任何用于解码的东西对其进行解码,它就会显示良好。因此,在JSON中,
Niter\u00f3i
将像这样显示,但一旦您使用它,它将从中显示为一个普通字符串
Niterói

(您确实应该从这里开始)

JSON\u UNESCAPED\u UNICODE

对多字节Unicode字符进行逐字编码(默认值为转义为\uxxx)。从PHP5.4.0开始提供

所以

编辑:另请查看注释,说明这种方法可能存在问题的原因(它实际上违反了JSON的RFC)。

  • 您应该在每个文件的顶部使用
    mb\u internal\u encoding()
    函数,并在其后使用
    mb\u http\u output()
    函数

  • 需要设置为
    utf8mb4
    字符集和排序规则的数据库和表

  • 要保存到数据库,请使用htmlentities,并通过像下面这样对UTF-8进行求值
    htmlentities($yourdata,entu QUOTES | entu HTML5,$encoding='UTF-8')

您必须添加以下内容才能访问mysqli的数据库:

$conn->set_charset('utf8mb4');
mysqli_set_charset($conn, 'utf8mb4');
在这里阅读——以正确的方式使用PHP中的UTF-8

  • 它解释了如何在PHP级别、数据库级别和浏览器级别正确使用UTF-8

问题出在哪里?当他们应该变成他们以前的样子。前端JS应该显示得恰到好处。您正在使用的php函数
utf8\u encode
可以做到这一点,但是您期望得到什么呢?在我的json中应该是这样的:[{“id”:“1”,“id_-uf”:“1”,“cidade”:“sorcabaa”},{“id”:“2”,“id_-uf”:“5”,“cidade”:“Niterói”},{“id”:“3”,“id_-uf”:“1”,“cidade”:“Tatui”},{“id”:“4”,“id_-uf 1”,“cidaude”:“Itu”},@DainisAbolsNo,不应该是这样的,这不是。但是由于它在来自数据库的单词中有一个特殊字符,所以我无法转换整个单词@dainisabolst这是危险的,因为在从后端向前端发送数据时,很有可能会丢失编码。特别是在API和网站等不同服务器之间。有一个很好的理由来解释它的编码方式。这回答了OP的问题。我建议你的评论和警告就足够了,但如果有问题,他们也应该咨询。我建议,他们或他们付费的人应该为他们的具体案例制定出符合他们要求的、兼容的事情。谢谢你的提示(我会在搜索之前对搜索的字符串进行编码,但是我不会在搜索的任何地方存储JSON)。非常感谢我这么做:echo json_encode($respostas,json_UNESCAPED_UNICODE | json_UNESCAPED_SLASHES | json_NUMERIC_CHECK)@夫人
[{"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"}]
json_encode('Niterói', JSON_UNESCAPED_UNICODE);
$conn->set_charset('utf8mb4');
mysqli_set_charset($conn, 'utf8mb4');