FAQ
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

Search Discussions

  • Arnold Roa at Aug 23, 2010 at 5:22 pm
    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 <manolet@gmail.com>
    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
  • Carlos Medina at Aug 26, 2010 at 3:08 pm

    Am 23.08.2010 19:22, schrieb Arnold Roa:
    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<manolet@gmail.com>
    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
    Hola

    http://www.php.net/manual/es/ref.mbstring.php

    Saludos

    Carlos Medina

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedAug 23, '10 at 5:07p
activeAug 26, '10 at 3:08p
posts3
users2
websitephp.net

2 users in discussion

Arnold Roa: 2 posts Carlos Medina: 1 post

People

Translate

site design / logo © 2022 Grokbase