php中带有json的特殊字符
我试图获取数据库中的数据并用json显示它们。但是有口音的单词是这样出现的:\u00f3 我的代码如下: cidadeDao.phpphp中带有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() {
<?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')代码>
$conn->set_charset('utf8mb4');
mysqli_set_charset($conn, 'utf8mb4');
在这里阅读——以正确的方式使用PHP中的UTF-8
- 它解释了如何在PHP级别、数据库级别和浏览器级别正确使用UTF-8
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');