Foros del Web » Programando para Internet » PHP »

Caracteres extraños en un string

Estas en el tema de Caracteres extraños en un string en el foro de PHP en Foros del Web. Hola, Tengo un problema al procesar una cadena. Le he estado dando mil vuelta y ya no sé cómo solucionarlo :S La cadena la leo ...
  #1 (permalink)  
Antiguo 14/12/2012, 03:41
 
Fecha de Ingreso: abril-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 1
Caracteres extraños en un string

Hola,

Tengo un problema al procesar una cadena. Le he estado dando mil vuelta y ya no sé cómo solucionarlo :S

La cadena la leo de un archivo .csv. Es una dirección de correo eletrónico. El problema es que al intentar enviar un email a esa dirección falla. Consulté la longitud de la cadena por si había algún caracter raro y strlen dice que el número de caracteres de la cadena es el doble menos uno de los caracteres que se muestran. Es decir, si por ejemplo se lee la cadena "[email protected]", strlen dice que tiene 29 caracteres.

Si mostramos los caracteres con la siguiente función:

for($i=0;$i<strlen($emailContact);$i++){
echo $i."_".substr($emailContact,$i,1)." - ";
}

El resultado es,

0_j - 1_ - 2_u - 3_ - 4_a - 5_ - 6_n - 7_ - 8_@ - 9_ - 10_c - 11_ - 12_o - 13_ - 14_r - 15_ - 16_r - 17_ - 18_e - 19_ - 20_o - 21_ - 22_. - 23_ - 24_c - 25_ - 26_o - 27_ - 28_m -

En realidad según eso, entre un carácter y otro no hay ningún espacio en blanco. Es como que no hay nada, pero ocupa un lugar.

He probado con funciones para eliminar espacios en blanco, caracteres extraños, trim... y nada funciona ¿Alguna idea?

Gracias por la ayuda!!
  #2 (permalink)  
Antiguo 14/12/2012, 03:46
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Caracteres extraños en un string

Tal vez podría ser problema de codificación, aunque sin ver la estructura del archivo es difícil ayudarte, también seria bueno ver como lees dicho archivo...

En todo caso podrías probar con utf8_encode/decode....
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 14/12/2012, 04:06
 
Fecha de Ingreso: abril-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 1
Respuesta: Caracteres extraños en un string

Hola, gracias por responder.

La estructura del archivo es el que genera Hotmail al exportar tus contactos a un archivo .csv. Los campos están separados por comas y encerrados entre comillas dobles.

Para leer el archivo hago lo siguiente,

$fp=fopen("WLMContacts.csv","r");

while (($data=fgetcsv($fp,";"))!==false ){
$datosContacto = explode(';',$data[0]);

//Y se enviaría el email a $datosContacto[46]
}

Para utf8_encode/decode... probé y no funcionaba. Es algo que sólo pasa con el archivo .csv que genera Hotmail. Para los .csv que generan Gmail y Yahoo no ocurre, en estos casos no hay problema. Aunque también es verdad que el formato para estos casos no es el mismo. Son campos separados por comas.
  #4 (permalink)  
Antiguo 14/12/2012, 04:46
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Caracteres extraños en un string

Me llamo mucho la atención de tu problema y eh hecho pruebas, aunque no con hotmail, si no con outlook.com (ya no tengo acceso a hotmail >.<), pero dudo que sea diferente, en fin, en mi caso antes de cada caracter agrega un caracter nulo (si, nulo, en ascii 0), por lo cual no se imprime pero hay esta presente, en fin, que es facil quitarlo, te dejo el ejemplo que eh usado...

Código PHP:
Ver original
  1. //la funcion getContactos no tiene nada especial, lee el archivo y guarda cada linea en un array
  2. $contactos = getContactos();
  3. $email = $contactos[1]['email'];
  4. $letras = $contactos[1]['length'];
  5. $emailLet = '';
  6.  
  7. for($i=0; $i<$letras; $i++) {
  8.     $letra =$email[$i];
  9.     $ascii = ord($letra);
  10.  
  11.     if ($ascii != 0 && $ascii != 34) {
  12.         $emailLet .= $letra.'-';
  13.     }
  14. }
  15.  
  16. echo '<p>'.$emailLet.'</p>';

La razón de que este hay el caracter no tengo idea, pero hay esta, en fin, con el código que te dejo se "limpia" el string de eso caracteres y no afecta a otros, unicamente no agrega caracteres el cual el código ascii sea 0
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: caracteres, extraños, string
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:48.