Foros del Web » Programando para Internet » PHP »

caracteres especiales

Estas en el tema de caracteres especiales en el foro de PHP en Foros del Web. hola otra vez XD, tengo la siguiente situacion: tengo una base de datos en postgre , en la k se insertan nombres y apellidos, y ...
  #1 (permalink)  
Antiguo 12/03/2007, 09:48
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
caracteres especiales

hola otra vez XD, tengo la siguiente situacion:
tengo una base de datos en postgre , en la k se insertan nombres y apellidos, y posteriormente se solicitan datos extra usanso como referncia , el nombre y los apellidos, el problema son los caracteres especiales (vocales acentuadas ,Ñ), hice 1 modulo k deberia estandarizar los nombres (2 versiones, con el caracter, y con entidades)
Con entidades:
Código PHP:
function reemplazo($cadena$c$r){
for(
$i=0;$i<strlen($cadena);$i++){ 
    if (
$cadena{$i}==$c){
       
$cadena{$i}=$r;}}
return (
$cadena);
}
function 
arreglar($cadena){
$cadena=reemplazo($cadena'&agrave;''A');
$cadena=reemplazo($cadena'&aacute;''A');
$cadena=reemplazo($cadena'&atilde;''A');
$cadena=reemplazo($cadena'&acirc;''A');
$cadena=reemplazo($cadena'&Agrave;''A');
$cadena=reemplazo($cadena'&Aacute;''A');
$cadena=reemplazo($cadena'&Atilde;''A');
$cadena=reemplazo($cadena'&Acirc;''A');
$cadena=reemplazo($cadena'&egrave;''E');
$cadena=reemplazo($cadena'&eacute;''E');
$cadena=reemplazo($cadena'&etilde;''E');
$cadena=reemplazo($cadena'&ecirc;''E');
$cadena=reemplazo($cadena'&Egrave;''E');
$cadena=reemplazo($cadena'&Eacute;''E');
$cadena=reemplazo($cadena'&Etilde;''E');
$cadena=reemplazo($cadena'&Ecirc;''E');
$cadena=reemplazo($cadena'&igrave;''I');
$cadena=reemplazo($cadena'&iacute;''I');
$cadena=reemplazo($cadena'&itilde;''I');
$cadena=reemplazo($cadena'&icirc;''I');
$cadena=reemplazo($cadena'&Igrave;''I');
$cadena=reemplazo($cadena'&Iacute;''I');
$cadena=reemplazo($cadena'&Itilde;''I');
$cadena=reemplazo($cadena'&Icirc;''I');
$cadena=reemplazo($cadena'&ograve;''O');
$cadena=reemplazo($cadena'&oacute;''O');
$cadena=reemplazo($cadena'&otilde;''O');
$cadena=reemplazo($cadena'&ocirc;''O');
$cadena=reemplazo($cadena'&Ograve;''O');
$cadena=reemplazo($cadena'&Oacute;''O');
$cadena=reemplazo($cadena'&Otilde;''O');
$cadena=reemplazo($cadena'&Ocirc;''O');
$cadena=reemplazo($cadena'&ugrave;''U');
$cadena=reemplazo($cadena'&uacute;''U');
$cadena=reemplazo($cadena'&utilde;''U');
$cadena=reemplazo($cadena'&ucirc;''U');
$cadena=reemplazo($cadena'&Ugrave;''U');
$cadena=reemplazo($cadena'&Uacute;''U');
$cadena=reemplazo($cadena'&Utilde;''U');
$cadena=reemplazo($cadena'&Ucirc;''U');
$cadena=reemplazo($cadena'&ntilde;''N');
$cadena=reemplazo($cadena'&Ntilde;''N');
$cadena=strtoupper($cadena);
return(
$cadena);

Con los Caracteres
Código PHP:
function reemplazo($cadena,$c,$r){

for(
$i=0;$i<strlen($cadena);$i++){ 
    if (
$cadena{$i}==$c){
       
$cadena{$i}=$r;}}
return 
$cadena;
  

function 
arreglar($cadena){
$cadena=reemplazo($cadena,'à','A');
$cadena=reemplazo($cadena,'á','A');
$cadena=reemplazo($cadena,'ä','A');
$cadena=reemplazo($cadena,'â','A');
$cadena=reemplazo($cadena,'À','A');
$cadena=reemplazo($cadena,'Á','A');
$cadena=reemplazo($cadena,'Ä','A');
$cadena=reemplazo($cadena,'Â','A');
$cadena=reemplazo($cadena,'è','E');
$cadena=reemplazo($cadena,'é','E');
$cadena=reemplazo($cadena,'ë','E');
$cadena=reemplazo($cadena,'ê','E');
$cadena=reemplazo($cadena,'È','E');
$cadena=reemplazo($cadena,'É','E');
$cadena=reemplazo($cadena,'Ë','E');
$cadena=reemplazo($cadena,'Ê','E');
$cadena=reemplazo($cadena,'ì','I');
$cadena=reemplazo($cadena,'í','I');
$cadena=reemplazo($cadena,'ï','I');
$cadena=reemplazo($cadena,'î','I');
$cadena=reemplazo($cadena,'Ì','I');
$cadena=reemplazo($cadena,'Í','I');
$cadena=reemplazo($cadena,'Ï','I');
$cadena=reemplazo($cadena,'Î','I');
$cadena=reemplazo($cadena,'ò','O');
$cadena=reemplazo($cadena,'ó','O');
$cadena=reemplazo($cadena,'ö','O');
$cadena=reemplazo($cadena,'ô','O');
$cadena=reemplazo($cadena,'Ò','O');
$cadena=reemplazo($cadena,'Ó','O');
$cadena=reemplazo($cadena,'Ö','O');
$cadena=reemplazo($cadena,'Ô','O');
$cadena=reemplazo($cadena,'ù','U');
$cadena=reemplazo($cadena,'ú','U');
$cadena=reemplazo($cadena,'ü','U');
$cadena=reemplazo($cadena,'û','U');
$cadena=reemplazo($cadena,'Ù','U');
$cadena=reemplazo($cadena,'Ú','U');
$cadena=reemplazo($cadena,'Ü','U');
$cadena=reemplazo($cadena,'Û','U');
$cadena=reemplazo($cadena,'Ñ','N');
$cadena=reemplazo($cadena,'ñ','N');
$cadena=strtoupper($cadena);

el problema es k no esta reeeplazandolos, como se supone k debiera, ya k reviso la base y siguen estando los caracteres especiales, si alguien sabe como solucionar esto k por favor me lo diga
  #2 (permalink)  
Antiguo 12/03/2007, 10:44
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 4 meses
Puntos: 17
Re: caracteres especiales

Veo que haces los reemplazos manualmente, hay uan funcion que los hace en los string, utiliza str_replace , funcion que reemplaza un string buscado en un string.

Código PHP:
<?

$texto 
"hola a todos como estan :P xD :P chile";
$texto str_replace (  "hola" "chao" $texto);

echo 
$texto.'<br>';

$texto str_replace (  array("A","B","C") , array( "a" "b" "c" ) , $texto);

echo 
$texto.'<br>';

?>
Imprime

Código:
chao a todos como estan :P xD :P chile
ChAo A todos Como estAn :P xD :P Chile
Ves como cambia los string


Saludos

Última edición por DeeR; 12/03/2007 a las 10:45 Razón: olvido
  #3 (permalink)  
Antiguo 12/03/2007, 10:47
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

lo veo pero esa funcion acepta los caracteres especiales?
  #4 (permalink)  
Antiguo 12/03/2007, 12:58
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

acabo de usar tu funcion usando los caracteres especiales y no funciono, intentare con entidades a ver si funka
  #5 (permalink)  
Antiguo 12/03/2007, 13:04
Avatar de seyacat  
Fecha de Ingreso: agosto-2006
Mensajes: 382
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

Si te fijas existe una constante

&Xacute
&Xtilde
&Xgrave
&Xcirc

en donde X simpre es el caracter que buscas, tranquilamente podrias usar REGEXP para parcear eso.

mmmm, ahora viendolo bien, tu al parecer tienes como caracteres raros y no como entidades(como las llamas), pues recorriendo la cadena y comparando con una tabla ASCII pudes eliminar los que no pertenecen a los caracteres convencionales.
  #6 (permalink)  
Antiguo 12/03/2007, 13:11
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

tampoko funciono con entidades, hay otra forma de reemplazar los caracteres especiales
  #7 (permalink)  
Antiguo 12/03/2007, 13:13
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

Cita:
Iniciado por seyacat Ver Mensaje
Si te fijas existe una constante

&Xacute
&Xtilde
&Xgrave
&Xcirc

en donde X simpre es el caracter que buscas, tranquilamente podrias usar REGEXP para parcear eso.

mmmm, ahora viendolo bien, tu al parecer tienes como caracteres raros y no como entidades(como las llamas), pues recorriendo la cadena y comparando con una tabla ASCII pudes eliminar los que no pertenecen a los caracteres convencionales.
la primera parte no te entendi, la segunda.... como hago una comparacion contra la tabla ascii .
pd. las llamo entidades por k asi se les llama en html
  #8 (permalink)  
Antiguo 12/03/2007, 13:17
Avatar de seyacat  
Fecha de Ingreso: agosto-2006
Mensajes: 382
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

en el primer aporte de la primera pagina que busque encontre que que pides....
Me parece que deberias entrenar con el buscador

http://www.php.net/chr
  #9 (permalink)  
Antiguo 12/03/2007, 13:18
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Re: caracteres especiales

Amigo no te compliques, para eso existe esta funcion htmlentities, devuelve cualquier cadena a una cadena legible por cualquier navegador, es decir te reemplaza los carácteres especiales por entidades html, y qué son entidades html, pues una es esto que tú mismo has escrito: &aacute;
  #10 (permalink)  
Antiguo 12/03/2007, 13:29
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

Cita:
Iniciado por ElJavista Ver Mensaje
Amigo no te compliques, para eso existe esta funcion htmlentities, devuelve cualquier cadena a una cadena legible por cualquier navegador, es decir te reemplaza los carácteres especiales por entidades html, y qué son entidades html, pues una es esto que tú mismo has escrito: &aacute;
no me interesa k la cadena sea leida por el navegador eso es lo de menos, lo k me interesa es guardar la cadena en la base de datos sin los caracteres especiales para facilitar la busqueda por ejemplo si tu buscas en la base de datos:
josé o josè o jose .... etc
pueda encontrarte
cualquier ocurrencia del nombre Jose, sin importar donde hayas escrito el acento, o las mayusculas (por eso use la instruccion strtouppuer), espero k haya kedado claro mi problema.. ahora intentare con la respuesta de seyacat
  #11 (permalink)  
Antiguo 12/03/2007, 13:46
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: caracteres especiales

No es necesario que hagas eso, si usas LATIN1, LATIN2, LATIN9 o WIN1250 como encoding para tu base de datos, la función to_ascii de postgresql debería servir para el mismo propósito.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #12 (permalink)  
Antiguo 12/03/2007, 14:25
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

Cita:
Iniciado por xknown Ver Mensaje
No es necesario que hagas eso, si usas LATIN1, LATIN2, LATIN9 o WIN1250 como encoding para tu base de datos, la función to_ascii de postgresql debería servir para el mismo propósito.

Saludos
siguen sin entender lo k yo necesito es k antes de ingresar cualkier texto a la base de datos le kite todos los caracteres especiales Ej:
"José Yañez soto" se guarda como "JOSE YANEZ SOTO"
entonces al buscar el usuario pregunta:
"jose yañez soto" se busca como "JOSE YANEZ SOTO"
la idea de reemplazar los caracteres especiales es por la razon de k estos no son afectados por las funciones k traspasan el string a mayusculas ya k en el ejemplo anterior si solo le indico k lo pase a mayusculas kedaria asi: "JOSé YAñEZ SOTO" , y si el usuario lo busca como "JOSÉ YAÑEZ SOTO" nunca le entregara la respuesta correcta, ese es el por k de buscar una forma de reemeplazar los caracteres especiales
  #13 (permalink)  
Antiguo 12/03/2007, 14:51
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

hace unos minutos probe con esta otra funcion
Código PHP:
function arreglar($cadena){
static 
$novalidos="àáäâÀÁÄÂèéëêÈÉËÊìíïîÌÍÏÎòóöôÒÓÖÔùúüûÙÚÜÛÑñ";
static 
$validos="AAAAAAAAEEEEEEEEIIIIIIIIOOOOOOOOUUUUUUUUNN";
$cadena=strtr($cadena $novalidos$validos);
$cadena=strtoupper($cadena);
return(
$cadena);

y tampoko funciono
  #14 (permalink)  
Antiguo 12/03/2007, 18:52
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: caracteres especiales

Cita:
Iniciado por GreenlanternX Ver Mensaje
siguen sin entender lo k yo necesito es k antes de ingresar cualkier texto a la base de datos le kite todos los caracteres especiales
Hombre, entendí perfectamente lo que quieres hacer, por eso comenté lo de la función to_ascii

Si no te tomaste la molestia de probarlo es tan simple como esto...
Código:
test=> select upper(to_ascii('José Yañez soto')) = 'JOSE YANEZ SOTO';
 ?column?
----------
 t
(1 fila)
Cita:
Ej:
"José Yañez soto" se guarda como "JOSE YANEZ SOTO"
entonces al buscar el usuario pregunta:
"jose yañez soto" se busca como "JOSE YANEZ SOTO"
la idea de reemplazar los caracteres especiales es por la razon de k estos no son afectados por las funciones k traspasan el string a mayusculas ya k en el ejemplo anterior si solo le indico k lo pase a mayusculas kedaria asi: "JOSé YAñEZ SOTO" , y si el usuario lo busca como "JOSÉ YAÑEZ SOTO" nunca le entregara la respuesta correcta, ese es el por k de buscar una forma de reemeplazar los caracteres especiales
Si quieres complicarte la vida haciendolo desde PHP, dale una mirada al código de Wordpress, ahí existe una función que hace lo mismo que la función to_ascii de postgres

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #15 (permalink)  
Antiguo 13/03/2007, 07:04
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

voy a probar lo k tu dices esperemos k funcione
  #16 (permalink)  
Antiguo 13/03/2007, 07:16
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

la base de datos me indica k la conversion de unicode a ascii no esta soportada, y si propones que la rehaga, no es posible , ya que esta pertenece a otro sistema, y no puedo llegar y reemplazarla sin afectar a dicho sistema, a menos que sepas como forzar la conversion, voy a tener que ver eso k dijiste de worpress
  #17 (permalink)  
Antiguo 13/03/2007, 08:11
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

acabo de probar mis funciones sobre variables de texto asignadas manualmente, y en estas si funcionan , pero en las obtenidas de la BD todavia no
  #18 (permalink)  
Antiguo 13/03/2007, 08:30
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

xnow probe la funcion to_ascii k me dijiste en una copia de la base k se encuentra en latin1, y los acentos los sigue dejando ahi.
como puedo dejar mis variables con un tipo definido de forma k la variable que declare en la k si funcionan mis codigos, se le pueda asignar la lectura de la base y siga funcionando, por k lo estoy intentando y al momento de asignarle el contenido de la base dejan de funcionar
  #19 (permalink)  
Antiguo 13/03/2007, 15:44
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Re: caracteres especiales

Hola...

Yo he probado con:
Código PHP:
function reemplaza(&$cadena) {
    
$exp_reg0 "á";
    
$exp_reg1 "bbbb";
    
$cadena str_replace($exp_reg0$exp_reg1$cadena);
    return 
$cadena;

y la cadena es retornada como si nada, es decir, cómo si no existiera una 'á' (a acentuada)...

¿Es posible que tenga que ver con la codificación entre el cliente y el servidor?
__________________
Gracias de todas todas
-----
Linux!
  #20 (permalink)  
Antiguo 13/03/2007, 15:54
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Re: caracteres especiales

Hola...

Cita:
Iniciado por xknown Ver Mensaje
...la función to_ascii de postgresql debería servir para el mismo propósito.
¿es posible poner por default al campo, que todo lo que entre pase por la función?...
__________________
Gracias de todas todas
-----
Linux!
  #21 (permalink)  
Antiguo 19/03/2007, 07:40
 
Fecha de Ingreso: agosto-2006
Mensajes: 141
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: caracteres especiales

olvide avisar k llegue a un acuerdo con el usuario , y no vamos a ocupar los caracteres especiales , siento no haber avisado antes
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 12:59.