2012-09-19 24 views
9

Cuando renumeración de una matriz mediantephp preg_replace línea de sustitución de romper

$arr=array_values($arr); // renumber array 

I dio cuenta de que un salto de línea se introduce en una de las cadenas de la matriz, que no quiero.

Mi cadena va desde:

Propiedad Tipo

a la propiedad

Tipo

En cualquier caso estoy usando:

$newelement=preg_replace("/[^A-Za-z0-9\s\s+]/"," ",$element); 

ya a quitar no deseados charchters antes de la inserción db así que traté de cambiarlo a:

$newelement=preg_replace("/[^A-Za-z0-9\s\s+'<br>''<br>''/n''/cr']/"," ",$element); 

pero no hay cambio, y el avance de línea/salto de línea de retorno/carro sigue ahí?.

¿Estoy haciendo el preg_replace correctamente?

+0

Los saltos de línea son \ n o \ r o \ r \ n según el sistema operativo. 'str_replace (array ('\ r \ n', '\ n', '\ r'), '', $ text)' – Horen

+0

Debe solucionar el problema subyacente en lugar de intentar repararlo; 'array_values' no cambia los valores, vea este ejemplo: http: // codepad.org/Mhbzjkl8 – jeroen

Respuesta

20

Ese preg parece un poco complicado. Y luego tienes^al principio como Not A-Z ... o linefeed. ¿Entonces no quieres reemplazar el avance de línea?

¿Qué tal

$newelement=preg_replace("/[\n\r]/","",$element); 

o

$newelement=preg_replace("/[^A-Za-z ]/","",$element); 

\ s también coincide con el avance de línea (\ n)

+1

Para la primera alternativa '/ \\ [nr] /' sería un patrón más exacto. Sin esas barras invertidas escapadas, reemplazará las letras 'n' o 'r'. –

4

Esto podría también funciona:

// char(32) is whitespace 
// for CR 
$element = strtr($element, chr(13), chr(32)); 

// for LF 
$element = strtr($element, chr(10), chr(32)); 
2

Esta cosa trabajó para yo.

preg_replace("/\r\n\r\n|\r\r|\n\n/", "<br />", $element); 

(Editado para agregar barra faltante)

1

Es hack, pero se puede hacer algo como esto:

$email_body_string = preg_replace("/\=\r\n$/","", $email_body_string); 

La sustitución dice encontrar una línea que termina con un signo de igual y tiene las contraseñas de retorno de carro estándar y de alimentación de línea. Reemplace esos caracteres con nada ("") y el signo igual desaparecerá, la línea debajo de él se levantará para unir la primera línea.

Ahora, esto implica que nunca tendrá una línea que termine con un signo igual, que es un riesgo. Si quieres hacerlo mejor, comprueba la longitud de la línea donde aparece el ajuste (con el signo igual). Suele tener unos 73 caracteres desde el comienzo de la línea. Entonces podría decir:

if (strlen(equals sign) == 73) 
     $email_body_string = preg_replace("/\=\r\n$/","", $email_body_string);