php - json_numeric_check - Función json_encode: caracteres especiales
php json_numeric_check (6)
Para solucionar el problema del personaje especial solo tienes que hacer 2 cosas
1. mysql_set_charset(''utf8'');
// establece esta línea en la parte superior de la página en la que está usando json.
- Si está guardando datos json en la base de datos, asegúrese de que la intercalación de columnas en particular esté configurada en "
latin1_swedish_ci
".
Los elementos de una matriz que contiene caracteres especiales se convierten a cadenas vacías cuando se codifica la matriz con json_encode:
$arr = array ( "funds" => "ComStage STOXX®Europe 600 Techn NR ETF", "time"=>....);
$json = json_encode($arr);
Después de la codificación JSON, el elemento [fondos] es nulo. Sucede solo con caracteres especiales (derechos de autor, marca registrada, etc.) como los de "ComStage STOXX®Europe 600 Techn NR ETF".
¿Alguna sugerencia?
Gracias
ACTUALIZACIÓN: Esto es lo que resolvió el problema antes de poblar la matriz (todos los nombres se toman de la base de datos):
$mysqli->query("SET NAMES ''utf8''");
Para mí, funciona de esta manera:
# Creating the ARRAY from Result.
$array=array();
while($row = $result->fetch_array(MYSQL_ASSOC))
{
# Converting each column to UTF8
$row = array_map(''utf8_encode'', $row);
array_push($array,$row);
}
json_encode($array);
Su entrada debe codificarse como UTF-8 o ISO-8859-1.
http://www.php.net/manual/en/function.json-encode.php
Porque si intenta convertir una matriz de caracteres que no son utf8 obtendrá 0 como valor de retorno.
Desde 5.5.0 El valor de retorno en la falla se cambió de cadena nula a FALSO.
debe agregar charset = UTF-8 en metaetiqueta y usar json_encode para caracteres especiales
$json = json_encode($arr);
La función json_encode convierte caracteres especiales en el estándar UTF8
deberías usar este código:
$json = json_encode(array_map(''utf8_encode'', $arr))
La función array_map convierte caracteres especiales en el estándar UTF8
http://www.php.net/manual/en/function.json-encode.php
Todos los datos de cadena deben estar codificados en UTF-8.
Por lo tanto, pruebe array_map
ping utf8_encode()
a su matriz antes de codificarla:
$arr = array_map(''utf8_encode'', $arr);
$json = json_encode($arr);
// {"funds":"ComStage STOXX/u00c2/u00aeEurope 600 Techn NR ETF"}
Como referencia, eche un vistazo a las diferencias entre los tres ejemplos en este violín . El primero no usa codificación de caracteres, el segundo usa htmlentities
y el tercero usa utf8_encode
, todos ellos arrojan resultados diferentes.
Para coherencia, debe usar utf8_encode()
.
Documentos