Re: preg cambia la codificación de un string solo p or parsearlo??

[email protected] (Arnold Roa)
Newsgroups php.general.es
Message-ID <[email protected]>
Bueno, me respondo a mi mismo. Tal vez no fui suficientemente explicito pero
ejecutar ese codigo en un archivo utf-8 daba como resultado esto:

Secretárias - Administração
Secretaarias - Administraa�a�o

Lo que no entendía es porque razón me DUPLICABA LA LETRA A!. y porque razon
me cambiaba la codificación de caracteres del string.

Lo probe tanto con PCRE como con POSIX y fallaba (casi) igual. Sin embargo
leyendo un poco encontre que POSIX tiene el modificador \u que hace que las
strings sean tratadas como UTF-8. De esta manera funciona adecuadamente, mi
teoria es que POSIX tratan por defecto los strings como ANSI, y al ser un
mapa de caracteres más corto, cuando ven internamente "á" lo ve como dos
caracteres.

Para que no falle de esa manera se pueden hacer dos cosas, primero usar el
modificador \u de la siguiente manera:


$s = "Secretárias - Administração ";
echo preg_replace('/[á]/iu','a',$s);

o bien pasar el string a ANSI, pasarla por POSIX y volverla a pasar a UTF:

$s = "Secretárias - Administração ";
$s = utf8_decode($s);
$s = preg_replace('/[á]/i','a',$s);
echo utf8_encode($s);

El resultado es el mismo, bastante interesante! Yo no lo sabia :D


Arnold


2010/8/23 Arnold Roa <[email protected]>

> Saludos, tengo problemas con la versión de una web en portugues y una
> funcion para poder crear urls sin acentos, estoy haciendo pruebas pero cada
> vez me frustro más.
>
> Estoy probando con el siguiente codigo por ejemplo:
>
> $s = "Secretárias - Administração ";
> echo $s;
> echo "<br/>". preg_replace('/[á]/i','a',$s);
>
> El archivo esta en UTF-8 y el navegador lo interpresta como UTF-8. El
> primer echo lo hago para asegurarme que se vean bien los acentos en el
> navegador y luego el preg solamente busca una á con tilde, pero si se fijan
> cambia los demas caracteres que no tienen nada que ver, como la c con cosita
> y la a con cosita de la ñ. esto de verdad que me ha liado ya que no entiendo
> porque me hace eso solo por el hecho de parsearlo.
>
> Arnold
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.