2010-10-10 28 views
8

Si tengo un string UTF-8 y quiero reemplazar los saltos de línea con el HTML <br>, ¿esto es seguro?¿Está reemplazando un salto de línea UTF-8?

$var = str_replace("\r\n", "<br>", $var); 

Sé que str_replace no es seguro para UTF-8, pero quizás pueda salirse con la suya. Lo pregunto porque no hay una función mb_strreplace.

Respuesta

16

UTF-8 está diseñado para que las secuencias de múltiples bytes nunca contengan nada que se parezca a un carácter ASCII. Es decir, cada vez que encuentre un byte con un valor en el rango 0-127, puede asumir que es un carácter ASCII.

Y eso significa que siempre que solo intente reemplazar los caracteres ASCII con caracteres ASCII, str_replace debería ser seguro.

+3

* Solo intente reemplazar caracteres ASCII con caracteres ASCII. – Potatoswatter

+0

+1 para la explicación correcta. Creo que otros intentaron decir lo mismo, pero esta es la única respuesta que tiene perfecto sentido para mí. –

+0

@Potatoswatter: uy, sí, ese es un punto bastante importante. Editado ;) – jalf

7

str_replace() es seguro para cualquier personaje seguro para asci.

Por cierto, también se puede ver la primera nl2br()

1

: Utilice el marcado de código de muestra para código en sus preguntas.

2do: Sí, es guardar.

3er: Puede que no sea lo que quiere archivar. Esto podría ser mejor:

$var = str_replace(array("\r\n", "\n", "\r"), "<br/>", $var); 

No olvides que los diferentes sistemas operativos manejan saltos de línea diferentes. El código anterior debería reemplazar todos los saltos de línea, sin importar de dónde provengan.