Foros del Web » Programando para Internet » PHP »

Alguien tiene una funcion para eliminar catacteres de los titulos ?

Estas en el tema de Alguien tiene una funcion para eliminar catacteres de los titulos ? en el foro de PHP en Foros del Web. Hola yo estoy usando esta pero no me funciona en un 100% digamos un 30% pero bueno, alguien me podria pasar alguna mejor ? caracteres ...
  #1 (permalink)  
Antiguo 16/06/2008, 23:37
Avatar de hawaiian050  
Fecha de Ingreso: junio-2007
Mensajes: 285
Antigüedad: 16 años, 10 meses
Puntos: 2
Alguien tiene una funcion para eliminar catacteres de los titulos ?

Hola yo estoy usando esta pero no me funciona en un 100% digamos un 30% pero bueno, alguien me podria pasar alguna mejor ?

caracteres que se no funcionan la funcion son: (),. -- --- y ?¿ !! entre otros muchos mas

Código PHP:

function limpia($str,$min 0) {
    
$str ereg_replace("[^a-zA-Z0-9.()]",' ',$str);
    return (
$min == 1) ? strtolower($str) : $str;

}

function 
Limp($text) {
static 
$acentos "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙâêîôûÂÊÎÔÛäëïöüÄËÏÖÜ";
static 
$validos "aeiouAEIOUaeiouAEIOUaeiouAEIOUaeiouAEIOU";
return 
strtr($text$acentos$validos);

desde ya muchas gracias

un saludo
  #2 (permalink)  
Antiguo 17/06/2008, 00: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: Alguien tiene una funcion para eliminar catacteres de los titulos ?

yo uso esta función para normalizar los títulos y poder usarlos como URL limpias... en especial para ModRewrite

Código PHP:
/**
 * (cadena[, minusculas?[, ordinal]])
 *
 * Devuelve una cadena sin acentos, y normalizada.
 */
function normalize($text$lower true$ord 95)
{
    
$char is_numeric($ord)? chr($ord): $ord[0];
    
$text // ------------ Reemplazamos todo excepto
            
preg_replace('/[^a-zA-Z0-9\.,;:\/%_-]+/',
        
$charunaccent($text));
    
    
$expr preg_quote($char);
    
$text // Cambiamos residuos dobles...
            
preg_replace("/[$expr]+/"$chartrim($text$char));
    
    if (
$lower)
    { 
// cambiamos a minusculas
        
$text strtolower($text);
    }
    return 
$text;
}

/**
 * (cadena)
 *
 * Elimina los acentos de la cadena, naturalmente.
 */
function unaccent($text)
{
    static 
$find$repl;
    
    if (!
is_array($find))
    {
        
$find $repl = array();
        
$html // Obtenemos la tabla
            
get_html_translation_table(HTML_ENTITIES);
        
        foreach (
$html as $char => $ord) {
            if (
ord($char) >= 192) {
                
$find[] = utf8_encode($char); // xS
                
$repl[] = $ord[1];
            }
        }
    } 
// Hacemos los cambios de acentos...
    
$text str_replace($find$repl$text);
    return 
$text;

espero te sirva, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 17/06/2008 a las 18:45
  #3 (permalink)  
Antiguo 17/06/2008, 09:02
Avatar de hawaiian050  
Fecha de Ingreso: junio-2007
Mensajes: 285
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

tienes mi karma socio, muchas gracias ya quedo exelente función muy recomendadble.

Saludos

Última edición por hawaiian050; 17/06/2008 a las 09:11
  #4 (permalink)  
Antiguo 17/06/2008, 09:25
Avatar de hawaiian050  
Fecha de Ingreso: junio-2007
Mensajes: 285
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

Tengo un problema, al usar la funcion me remplaza los carcteres pero cuando abro la pagina que raro !, si yo lo puse en el archivo de enviar la url, en la sql esta con todos los carcteres


$name = accents(stripslashes(normalize($_POST[name])));
$name = unaccent($_POST[name]);
$des = accents(addslashes(($_POST[des])));

podrias explicarme como funciona o como deveria ir ?

te agregadesco saludos
  #5 (permalink)  
Antiguo 17/06/2008, 09:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

Hola hawaiian050,

Tu debes de llamar solo a la función normalize, no es necesario que llames a unaccent.

Saludos.
  #6 (permalink)  
Antiguo 17/06/2008, 14:03
Avatar de hawaiian050  
Fecha de Ingreso: junio-2007
Mensajes: 285
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

Cita:
Iniciado por GatorV Ver Mensaje
Hola hawaiian050,

Tu debes de llamar solo a la función normalize, no es necesario que llames a unaccent.

Saludos.
Hola GatorV,

gracias por explicarme era eso mismo . La que usa foros del web esta muy buena :) seria bueno usarla por que la que me pasaron se cuelan muchos caracteres .

Un saludo tienes mi karma
  #7 (permalink)  
Antiguo 17/06/2008, 14:47
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

bueno, el que guste.... si sabe algo de expresiones regulares... puede intervenir el código, de la función.... que es libre, pues!

grax

PDTA: si estaría bien, ver el código que usan en esta web... (supongo viene con vBulletin)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 17/06/2008, 17:57
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

Hola pateketrueke, podias explicar un poco la funcion, por que a mi me devuelve lo mismo en estos tres echos.

Código PHP:
$cadena "áéíóúàèiòò - HOLA hola2";
$cadena2 "áéíóúàèiòò - HOLA hola2";


echo 
$cadena;
echo
"<br>";

normalize($cadena);
echo 
$cadena;
echo
"<br>";

unaccent($cadena2);
echo 
$cadena2
igual esyoy cansado y no me entero.

Un saludo
  #9 (permalink)  
Antiguo 17/06/2008, 18:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

bueno... si hicieras esto, te darías cuenta (creo que estas cansado)

Código PHP:
$cadena "áéíóúàèiòò - HOLA hola2";
$cadena2 "áéíóúàèiòò - HOLA hola2";


echo 
$cadena;
echo
"<br>";

echo 
normalize($cadena);
//echo $cadena;
echo"<br>";

// o esto....
$cadena2 unaccent($cadena2);
echo 
$cadena2
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 17/06/2008, 18:28
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

Cansadisimo, aqui son las 2,30 am.

pero fijate en la salida que tengo ahora


áéíóúàèiòò - HOLA hola2

a_a_a_a_a_a�a_ia_a_---hola-hola2

A�A�A�A�A�A�A�iA�A� - HOLA hola2
  #11 (permalink)  
Antiguo 17/06/2008, 18:40
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

gracias a ti jaronu, descubrí un bug relacionado con utf-8 si deseas ver que funcione correctamente... edita esta linea

Código PHP:
$find[] = utf8_encode($char); // xS 
PDTA: ya edite el post con las funciones
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 17/06/2008, 19:13
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

Muy bueno pateketrueke,

Funcionan perfectas

Gracias por el aporte, eres una maquina.
  #13 (permalink)  
Antiguo 17/06/2008, 19:25
Avatar de hawaiian050  
Fecha de Ingreso: junio-2007
Mensajes: 285
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

Hola a todos,

Le hice una modificacion que se adapta a mi programaciòn, pero la posteo seguro os sirva a alguien , ah alguien sabe como sacar los _ por espacio ?

Mi idea aqui es remplazar todo lo que no sea letras y numberos, creo lo hice bien no pregunto ?
Código PHP:
function normalize($text$lower true$ord 95)
{
    
$char is_numeric($ord)? chr($ord): $ord[0];
    
$text // ------------ Reemplazamos todo excepto
            
preg_replace('/[^a-zA-Z0-9]+/'// AQUI MODIFIQUE
        
$charunaccent($text)); 
    
    
$expr preg_quote($char);
    
$text // Cambiamos residuos dobles...
            
preg_replace("/[$expr]+/"$chartrim($text$char));
    
    if (
$lower)
    { 
// cambiamos a minusculas
        
$text strtolower($text);
    }
    return 
$text;

Saludos y gracias
  #14 (permalink)  
Antiguo 17/06/2008, 19:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Alguien tiene una funcion para eliminar catacteres de los titulos ?

hawaiian050, el ultimo parámetro $ord es el numero ordinal, o carácter usado para reemplazar los caracteres inválidos por este....

el segundo parámetro si es true, convierte en minúsculas....

para usar el espacio, intenta con ...

Código PHP:
$ejemplo normalize($textotrue32);

// o tambien asi....
$ejemplo normalize($textotrue' '); 
ya que 32 es el ordinal... del espacio

NOTA: si quieres re-modifica tu función, así...

Código PHP:
function normalize($text$lower true$ord 32
así convertimos el espacio, en el carácter de reemplazo por defecto, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
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 18:54.