¿Cómo eliminar los retornos de carro de la salida de la cadena?

5 minutos de lectura

¿Cómo eliminar los retornos de carro de la salida de la cadena?
Zac

Estoy usando wordpress como un CMS e intento permitir que se ingresen campos de usuario para completar las ventanas de información en un script de Google Map. Estoy usando esto para seleccionar la identificación y extraer el contenido de un campo personalizado.

Funciona bien a menos que haya algún html en el campo personalizado que rompa el script.
Miré htmlspcialchar y htmlentities, pero en lugar de eliminar todo, me gustaría que se escapara para que aún funcione y el html esté intacto. ¿Alguna sugerencia? Soy bastante nuevo en PHP y realmente agradecería cualquier sugerencia.

Después de un tiempo, todavía no puedo encontrar una gran solución para esto. TheDeadMedic sugirió que use esc_js

pero eso imprimió todo el código html real en lugar de representarlo.

Gracias a nickfs, ya que esa solución fue un poco mejor, pero el script aún falla si hay retornos de carro en la salida, lo que hace que esto no sea tan bueno para un CMS.

Otra cosa que intenté fue usar la función de recorte… aquí es donde estoy ahora donde funciona siempre que no haya r en la salida. El campo $snip string, mapExcerpt es de donde provienen los retornos:

<?php $post_id = 207; // WordPress Post ID
$my_post = get_post($post_id);
$mapTitle  = $my_post->post_title;
$mapIMG = get_post_meta($post_id, 'mapImage', true);
$snip = get_post_meta($post_id, 'mapExcerpt', true);
$lat = get_post_meta($post_id, 'lat', true);
$long = get_post_meta($post_id, 'long', true);
$pass_to = '<div class="span-8"><div class="mapTitle">'.$mapTitle.'</div><div class="mapContent">'.$snip.'</div></div>';
$trimmed = trim($pass_to, " r.");
?>
var point = new GLatLng('<?php echo $lat; $lat; ?>','<?php echo $long; $long; ?>');
var marker = createMarker(point,"<?php echo $mapTitle; $mapTitle; ?>", '<?php echo addslashes($trimmed); ?>');
map.addOverlay(marker);

¿Alguna otra idea por ahí sobre cómo puedo lograr esto?

  • ¿Por qué habría HTML en el campo personalizado?

    – Tomás

    25 ago.

  • @Tom Para controlar el diseño, enlaces, etc…

    – Zac

    27 ago.


  • ¿Por qué no simplemente configurar un campo personalizado llamado ‘ubicación’ donde solo pueden ingresar esa latitud/longitud y definir una serie de otros campos personalizados para enlaces, diseño, etc.?

    – Tomás

    27 ago.

  • tengo eso, simplemente no puse esa parte aquí porque no es un problema. la razón por la que este campo personalizado tiene html incluido es porque es lo que aparece en la burbuja de información que aparece para los puntos de marcador. Tengo otros campos personalizados que son solo para una imagen con estilo que funciona, pero este con el texto es una especie de problema. Mientras no haya r, funciona muy bien, pero cualquier retorno de carro lo mata.

    – Zac

    28 ago.

  • Actualicé mi pregunta para mostrar más del código … espero que tenga más sentido ahora

    – Zac

    28 ago.

¿Cómo eliminar los retornos de carro de la salida de la cadena?
Alix Axel

No entiendo completamente su problema exacto, pero la respuesta al título de su pregunta es bastante simple:

$snip = str_replace('.', '', $snip); // remove dots
$snip = str_replace(' ', '', $snip); // remove spaces
$snip = str_replace("t", '', $snip); // remove tabs
$snip = str_replace("n", '', $snip); // remove new lines
$snip = str_replace("r", '', $snip); // remove carriage returns

O una solución todo en uno:

$snip = str_replace(array('.', ' ', "n", "t", "r"), '', $snip);

También puedes usar expresiones regulares:

$snip = preg_replace('~[[:cntrl:]]~', '', $snip); // remove all control chars
$snip = preg_replace('~[.[:cntrl:]]~', '', $snip); // above + dots
$snip = preg_replace('~[.[:cntrl:][:space:]]~', '', $snip); // above + spaces

Todavía tendrás que usar addslashes() a la salida $snip dentro de Javascript.

  • ¡¡Impresionante!! Gracias. También había pestañas y nuevas líneas que lo rompían, así que necesitaba todo esto. Gracias de nuevo 🙂

    – Zac

    31 ago.

  • Elimina todos los espacios en blanco con: preg_replace('/s/', ''. $str)

    – luukvhoudt

    22 mar. 18 a las 20:17

Siempre uso esto para deshacerme de los molestos retornos de carro:

$string = str_replace("rn", "n", $string); // windows -> unix
$string = str_replace("r", "n", $string);   // remaining -> unix

si necesita eliminar nuevos símbolos de línea de todo tipo (en utf8)

$dataWithoutCarrierReturn = preg_replace('/R/', '', $inData);

Ya que está poniendo esto en Javascript, deberá escapar para las cadenas de JavaScript. addslashes() debería hacer el truco.

Intente codificarlo con JSON, siempre lo hago cuando envío datos de PHP a Javascript. Resuelve la mayoría de los problemas de codificación, incluidos los saltos de línea.

  • Sí, eso es lo que pensé, pero no funciona en todos los casos. Estoy enfrentando ese problema exacto en realidad. Estoy usando una fuente de datos XML externa que importo a MySQL y el XML tiene caracteres de nueva línea “inusuales” que se guardan en la base de datos. Al recuperar a través de json_encode en Angular del lado del cliente, se cae debido a los NL. Hasta ahora no encontré ningún medio para filtrarlos. Incluso intenté convertir a ASCII para minimizar el conjunto de caracteres CTRL; nada funcionó

    – Ridículo

    06 feb.

¿Cómo eliminar los retornos de carro de la salida de la cadena?
elmedicomuerto

Usar el propio de WP esc_js()que evitará las comillas y los saltos de línea para las cadenas de JavaScript.

  • Sí, eso es lo que pensé, pero no funciona en todos los casos. Estoy enfrentando ese problema exacto en realidad. Estoy usando una fuente de datos XML externa que importo a MySQL y el XML tiene caracteres de nueva línea “inusuales” que se guardan en la base de datos. Al recuperar a través de json_encode en Angular del lado del cliente, se cae debido a los NL. Hasta ahora no encontré ningún medio para filtrarlos. Incluso intenté convertir a ASCII para minimizar el conjunto de caracteres CTRL; nada funcionó

    – Ridículo

    06 feb.

¿Cómo eliminar los retornos de carro de la salida de la cadena?
Alisso

Esta fue la única solución que funcionó para mí:

$dataWithoutCarrierReturn = preg_replace('/[x0D]/', '', $inData);

  • ¡Buena respuesta! Esa fue la única solución que funcionó para mí también, utilizada en un script php creado para exportar datos a un archivo CSV… Gracias.

    – LoicTheAztec

    26 feb. 17 en 15:34


.

¿Ha sido útil esta solución?