sirve salto que para linea jquery json tinymce line-breaks

para - Problema al recuperar texto en formato JSON que contiene saltos de línea con jQuery



salto de linea en json (9)

¿Obtiene saltos de línea como <br /> o saltos de línea como / n? Pero intenta reemplazarlos con PHP.

<?php $string = ''asdfasf<br />asdfasf''; echo str_replace(''<br />'', '''', $strin); // Replace <br /> with '''' (nothing) ?>

o echa un vistazo a urlencode

Tengo un problema extraño al recuperar texto con formato JSON. Uso jQuery post para enviar algunos datos (también formateados JSON) al servidor (ejecutando PHP) que funciona bien. Luego, cuando solicito la misma información del servidor usando jQuery get , el método de devolución de llamada nunca se ejecuta. Esto solo ocurre cuando los datos tienen formato JSON y los datos contienen un salto de línea. Cuando no uso el formato JSON funciona bien. Lo que me desconcierta es que no hay problemas al cargar los datos.

Código de carga: (funciona)

$.post("ajax/contents_ajax.php", { ''title'': caption, ''text'': frameText().getContent(), ''image_id'': img }, //Callback

Código de descarga: (no funciona con saltos de línea)

$.get("ajax/contents_ajax.php", { ''get_item'': id }, function (data){ //Never gets executed if data contains line breaks } ,''json'');

Todo el problema se debe al hecho de que el editor de texto enriquecido TinyMCE parece insistir en insertar saltos de línea en todas partes, aunque habilité la opción

remove_linebreaks : true

Prefiero tener saltos de línea, pero no si rompen mi código. ¿Alguien puede decirme cuál es el problema aquí, y quizás cómo puedo codificar los saltos de línea en el servidor con PHP?

Actualizar

Si bien las sugerencias para reemplazar ''/n'' por '''' no funcionaron, estuvieron cerca de la solución correcta. Este código eliminó los caracteres ofensivos:

function parse($text){ $parsedText = str_replace(chr(10), "", $text); return str_replace(chr(13), "", $parsedText); }


Como Terw, pero con reemplazo / n

<?php $json = str_replace(''/n'', '''', $json); ?>

Debe eliminar todos los saltos de línea, jquery no debe fallar
etiquetas, pero los saltos de línea no deberían estar en JSON.


Los saltos de línea no son el problema, ya que deben escaparse correctamente en JSON. Si está disponible para usted, puede usar json_encode, que escapa automáticamente a las nuevas líneas. De lo contrario, puede usar algo como el método anterior de Pim Jager, aunque un codificador JSON adecuado sería lo mejor.


Si desea mantener los saltos de línea, puede intentar:

function parse($text) { // Damn pesky carriage returns... $text = str_replace("/r/n", "/n", $text); $text = str_replace("/r", "/n", $text); // JSON requires new line characters be escaped $text = str_replace("/n", "//n", $text); return $text; }


Encontré ese problema al hacer una clase en PHP4 para emular json_encode (disponible en PHP5). Esto es lo que se me ocurrió:

class jsonResponse { var $response; function jsonResponse() { $this->response = array(''isOK''=>''KO'',''msg''=>''Undefined''); } function set($isOK, $msg) { $this->response[''isOK''] = ($isOK) ? ''OK'' : ''KO''; $this->response[''msg''] = htmlentities($msg); } function setData($data=null) { if(!is_null($data)) $this->response[''data''] = $data; elseif(isset($this->response[''data''])) unset($this->response[''data'']); } function send() { header(''Content-type: application/json''); echo ''{"isOK":"''.$this->response[''isOK''].''","msg":''.$this->parseString($this->response[''msg'']); if(isset($this->response[''data''])) echo '',"data":''.$this->parseData($this->response[''data'']); echo ''}''; } function parseData($data) { if(is_array($data)) { $parsed = array(); foreach ($data as $key=>$value) array_push($parsed, $this->parseString($key).'':''.$this->parseData($value)); return ''{''.implode('','', $parsed).''}''; } else return $this->parseString($data); } function parseString($string) { $string = str_replace("//", "////", $string); $string = str_replace(''/'', "///", $string); $string = str_replace(''"'', "//".''"'', $string); $string = str_replace("/b", "//b", $string); $string = str_replace("/t", "//t", $string); $string = str_replace("/n", "//n", $string); $string = str_replace("/f", "//f", $string); $string = str_replace("/r", "//r", $string); $string = str_replace("/u", "//u", $string); return ''"''.$string.''"''; } }

Seguí las reglas mencionadas aquí . Solo usé lo que necesitaba, pero creo que puedes adaptarlo a tus necesidades en el idioma que estás usando. El problema en mi caso no era sobre líneas nuevas como originalmente pensé, sino sobre / no haber escapado. Espero que esto evite que alguien más tenga el pequeño dolor de cabeza que tuve al descubrir lo que hice mal.


Has probado esto

update tablename set field_name_with_/r/n_in_it = replace(field_name_with_/r/n_in_it,"/r/n","<br />")

Funcionó para mí en mysql 5.0.45


También puede usar <pre> etiqueta <pre> que mantendrá todos los saltos de línea y espacios en blanco. Estoy publicando esta respuesta porque también encuentro ese problema y para las soluciones llegué a esta pregunta y después de eso decidí al azar usar etiqueta <pre> lugar de <div> y eso fue resuelto por problema, aunque en muchos lugares había barras invertidas no deseadas /


Fácil, solo intenta:

<?php ... function parseline($string){ $string = str_replace(chr(10), "//n", $string); $string = str_replace(chr(13), "//n", $string); return $string; } echo parseline($string_with_line_breaks);//returns json readable text

Lo he probado y funciona perfecto. No es necesario agregar funciones complicadas.