php - saltos - ¿Cómo eliminar los retornos de carro de la salida de la cadena?
quitar saltos de linea mysql (7)
Estoy usando wordpress como CMS y estoy tratando de permitir que los campos de usuario ingresen para llenar las ventanas de información en un script de Google Map. Estoy usando esto para seleccionar la identificación y obtener 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 quitar todo me gustaría tenerlo escapado para que todavía funcione y el html esté intacto. ¿Alguna sugerencia? Soy bastante nuevo en PHP y realmente apreciaría cualquier apuntador.
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 porque esa solución fue un poco mejor, pero el script aún se rompe si hay retornos de carro en la salida, lo que hace que esto no sea tan bueno para un CMS.
Otra cosa que probé fue usar la función de recorte ... aquí es donde estoy ahora donde funciona, siempre y cuando no haya nada 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 sobre cómo puedo lograr esto?
Esta fue la única solución que funcionó para mí:
$dataWithoutCarrierReturn = preg_replace(''/[/x0D]/'', '''', $inData);
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
Aún necesitará usar addslashes()
para generar $snip
dentro de Javascript.
Prueba la codificación JSON, siempre lo hago cuando envío datos de PHP a Javascript. Resuelve la mayoría de los problemas de codificación, incluidas las nuevas líneas.
Siempre uso esto para deshacerme de los molestos retornos de carruajes:
$string = str_replace("/r/n", "/n", $string); // windows -> unix
$string = str_replace("/r", "/n", $string); // remaining -> unix
Utilice el propio esc_js()
WP, que escapará a las cotizaciones y saltos de línea para las cadenas de JavaScript.
Ya que está poniendo esto en Javascript, tendrá que escapar de las cadenas de JavaScript. addslashes()
debería hacer el truco.
si necesita eliminar nuevos símbolos de línea de todos los tipos (en utf8)
$dataWithoutCarrierReturn = preg_replace(''//R/'', '''', $inData);