2010-11-19 26 views
9

Así que cuando ejecuto json_encode, también toma \ r \ n de MySQL. He intentado reescribir cadenas en la base de datos sin ningún resultado. He intentado cambiar la codificación en MySQL del latin1_swedish_ci por defecto a ascii_bin y utf8_bin. He hecho toneladas de str_replace y chr (10), chr (13) cosas. No sé qué más decir o hacer, así que simplemente voy a dejar esto aquí ....Reemplazando r n (caracteres de nueva línea) después de ejecutar json_encode

$json = json_encode($new); 
if(isset($_GET['pretty'])) { 
echo str_replace("\/", "/", jsonReadable(parse($json))); 
} else { 
$json = str_replace("\/", "/", $json); 
echo parse($json); 
} 

La función jsonReadable es de here y la función de análisis es de here. Los str_replaces que ya están allí son porque estoy obteniendo etiquetas html con formato extraño como </h1>. Finalmente, $ new es una matriz que está diseñada anteriormente. Código completo bajo petición.

Ayuda para StackOverflow. Eres mi única esperanza

+0

¿Ha leído la especificación JSON todavía? http://www.json.org/ –

+0

Sí, he trabajado con JSON durante mucho tiempo, la cosa es que el resultado de este script está siendo recogido por flash para un CMS y flash no-likey el \ r \ n material . Simplemente inserta nuevas líneas que no queremos. Queremos
. Y sí, probé nl2br, sin suerte. –

+0

Entonces alguien decidió no implementar JSON correctamente en Flash. Encantador. –

Respuesta

7

¿La cadena contiene "\ r \ n" (como en 0x0D 0x0A) o la cadena literal '\ r \ n'? Si es el primero, esto debería eliminar cualquier nueva línea.

$json = preg_replace("!\r?\n!", "", $json); 

Opcionalmente, cambie el segundo parámetro "" con "< br/>" si desea reemplazar los saltos de línea con una etiqueta br. Para el último caso, intente lo siguiente:

$json = preg_replace('!\\r?\\n!', "", $json); 
+0

Esto no funcionó, todavía están allí. Creo que * quizás * tiene algo que ver con MySQL:/ –

+0

Muy útil @ Frankie, gracias. – DnfD

2

tuve un problema similar, he utilizado:

$p_num = trim($this->recp); 
$p_num = str_replace("\n", "", $p_num); 
$p_num = str_replace("\r", ",", $p_num); 
$p_num = str_replace("\n",',', $p_num); 
$p_num = rtrim($p_num, "\x00..\x1F"); 

No estoy seguro si esto le ayudará con sus necesidades.

+0

Esto tampoco funcionó, de nuevo, creo que esto podría ser un problema de MySQL. ¡Gracias por el intento! * high-five * –

4

No lo reemplace en el JSON, reemplácelo en la fuente antes de codificarlo.

Cuestiones relacionadas