我试图获取数据库中的数据并在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中处理带重音符和特殊字符的单词?
答案 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
并且您必须添加它以访问mysqli的数据库:
htmlentities( $yourdata, ENT_QUOTES | ENT_HTML5, $encoding = 'UTF-8' );
在此处阅读 - 以正确的方式使用UTF-8,FROM PHP。 http://www.phptherightway.com/#php_and_utf8
答案 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)。