Foros del Web » Programando para Internet » PHP »

Convertir caracteres especiales en comunes

Estas en el tema de Convertir caracteres especiales en comunes en el foro de PHP en Foros del Web. Buen día. Estoy usando la función substr_count para buscar una palabra en una línea predefinida de la siguiente forma: Código PHP: substr_count ( strtolower ( ...
  #1 (permalink)  
Antiguo 12/10/2009, 14:25
Avatar de daPhyre
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: [email protected] (Redirects to 127.0.0.1)
Mensajes: 2.404
Antigüedad: 16 años, 1 mes
Puntos: 142
Pregunta Convertir caracteres especiales en comunes

Buen día.

Estoy usando la función substr_count para buscar una palabra en una línea predefinida de la siguiente forma:

Código PHP:
substr_count(strtolower($line), strtolower($search)); 
Para dar mejores resultados, cambio ambas líneas a minúsculas, pero me he topado con otro problema: Los caracteres especiales.

Es común que mucha gente escriba "cancion" en lugar de "canción", por dar un ejemplo. Y para evitar este tipo de problemas, deseaba convertir ambos strings a un modo simple sin caracteres especiales.

¿Alguien conocer alguna función que haga esto? Se los agradecería mucho.
__________________
<signs>daPhyre</signs>
Jugaa.me


Adios al dolor de cabeza de IE...
  #2 (permalink)  
Antiguo 12/10/2009, 14:32
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 9 meses
Puntos: 32
Respuesta: Convertir caracteres especiales en comunes

Esta podrias ser una forma...

Código PHP:
$str '120 segundos: Cómo ganar seguidores en Twitter';
$especial = array( 'á''é''í''ó''ú' );
$normal = array( 'a''e''i''o''u' );

echo 
str_replace($especial$normal$str); 
__________________
Como presentar nuestros datos por medio de tablas . clase Aco_DataGrid Version 1.4
  #3 (permalink)  
Antiguo 12/10/2009, 19:22
Avatar de daPhyre
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: [email protected] (Redirects to 127.0.0.1)
Mensajes: 2.404
Antigüedad: 16 años, 1 mes
Puntos: 142
Respuesta: Convertir caracteres especiales en comunes

Esto servirá, muchas gracias. Espero no olvidar alguno.

Supongo entonces que no existe una función que haga esto de forma automática, ¿Verdad?
__________________
<signs>daPhyre</signs>
Jugaa.me


Adios al dolor de cabeza de IE...
  #4 (permalink)  
Antiguo 12/10/2009, 19:33
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 9 meses
Puntos: 32
Respuesta: Convertir caracteres especiales en comunes

Q tal no existe funcion para hacerlo de forma automatica.
__________________
Como presentar nuestros datos por medio de tablas . clase Aco_DataGrid Version 1.4
  #5 (permalink)  
Antiguo 12/10/2009, 19:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Convertir caracteres especiales en comunes

no hay funciones predefinidas para esto...

solo hay que notar la función que contiene toda la información acerca de los caracteres especiales...

get_html_translation_table()
http://php.net/get_html_translation_table

Código PHP:
/**
 * Eliminar acentos
 *
 * Devuelve la cadena especificada sin
 * caracteres de acentuacion.
 *
 * <b>NOTE</b> que esta función puede no actuar
 * correctamente dependiendo de la codificacion empleada.
 *
 * @param string $text Cadena de entrada
 * @return string
 */
function unacent($text)
{
    static 
$test NULL;

    if (
is_null($test))
    {
        
// Obtenemos la tabla de "traduccion"
        
$html get_html_translation_table(HTML_ENTITIES);

        foreach (
$html as $char => $ord)
        {
            if (
ord($char) >= 192$test[$char] = $ord[1];
        }
    } 
// Hacemos los cambios de acentos...
    
$text strtr($text$test);
    return 
$text;

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 13/10/2009, 13:16
Avatar de daPhyre
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: [email protected] (Redirects to 127.0.0.1)
Mensajes: 2.404
Antigüedad: 16 años, 1 mes
Puntos: 142
Respuesta: Convertir caracteres especiales en comunes

@acoevil: Muchas gracias por todo entonces.

@paketetrueke: ¿Que codificación usas tú para esta función? Yo uso UTF-8, y para la palabra "jardín", me tiró un "jarda�n". Creo que no funciona entonces con esto, y aunque no entiendo exactamente que ocurre en el foreach, debo admitir que la función ha sido bastante interesante. ¡Muchas gracias!
__________________
<signs>daPhyre</signs>
Jugaa.me


Adios al dolor de cabeza de IE...
  #7 (permalink)  
Antiguo 13/10/2009, 13:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Convertir caracteres especiales en comunes

Cita:
Iniciado por daPhyre Ver Mensaje
@acoevil: Muchas gracias por todo entonces.

@paketetrueke: ¿Que codificación usas tú para esta función? Yo uso UTF-8, y para la palabra "jardín", me tiró un "jarda�n". Creo que no funciona entonces con esto, y aunque no entiendo exactamente que ocurre en el foreach, debo admitir que la función ha sido bastante interesante. ¡Muchas gracias!
claro, uso UTF-8 ... pero también no debes olvidar que:

- el script .php debe estar codificado en UTF-8 sin BOM
- debes enviar el header() o usar el <meta/> correspondiente al charset

y así, se supone que no debe haber fallo...

claro, si usas esto con datos sacados de la BD tal ves necesites usar utf8_encode/utf8_decode dependiendo del origen de los datos...


Edito: inclusive, puede ser necesario (sobre todo si haces ejemplos a mano) usar utf8_decode()
Código PHP:
header('Content-Type: text/html; charset=UTF-8');
var_dump(
    
unacent(utf8_decode('jardín'))
); 
y se supone que esto no debe pasar con otras entradas, como: $_GET, $_POST, etc, etc..
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 13/10/2009 a las 13:40
  #8 (permalink)  
Antiguo 13/10/2009, 13:44
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Convertir caracteres especiales en comunes

Si vas a usar utf-8 te sugiero codificar: header(), meta, base de datos (utf8_general_ci), archivo utf-8 without bom
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:24.