Foros del Web » Programando para Internet » PHP »

caracteres extraños al abrir archivos de texto

Estas en el tema de caracteres extraños al abrir archivos de texto en el foro de PHP en Foros del Web. Tengo en un archivo .txt la ubicación de un fraccionamiento, la cual quiero incluirla en la página web, pero al modificar la primera linea del ...
  #1 (permalink)  
Antiguo 17/08/2011, 13:07
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 16 años, 7 meses
Puntos: 2
Pregunta caracteres extraños al abrir archivos de texto

Tengo en un archivo .txt la ubicación de un fraccionamiento, la cual quiero incluirla en la página web, pero al modificar la primera linea del archivo me arroja caracteres extraños. Les explico mejor con ejemplos:

En el archivo .txt tengo lo siguiente.
Código:
#Fraccionamiento
Av. Lopez Portillo K.M 21.5 
a 2 minutos de Tierra Maya en dirección a Mérida

#Telefonos
01 (998) 2675682 al 86
El archivo lo guarde con formato UTF-8.

Para abrir el archivo con php uso la siguiente función:

Código PHP:
function archivoText($ruta,$opc){
    
$archivo fopen($ruta,"r");
    
$i=-1;
    
$j=0;
    while (!
feof($archivo)) {
        
$cadena2 fgets($archivo9999);
        
$cadena strchr($cadena2,'#');
        if(
$cadena){
            
$i++;
            
$cad_prin[$i]= $cadena2;
        }else if(
$i<0){
            
$inicio[$j] = $cadena2;
            
$j++;
        }else{
            
$cad_sec[$i] .= $cadena2."<br />";
         }
    }
    
fclose($archivo);
    
    switch(
$opc){
        case 
'ini'$texto $inicio;
                    break;
        case 
'tit'$texto $cad_prin;
                    break;
        case 
'tex'$texto $cad_sec;
                    break;
    }
    return 
$texto;

y en la página principal llamo a la funcion de este manera

Código PHP:
//Titulos
$text_File_tit archivoText($dir."ubicacion.txt","tit");

//Texto descriptivo
$text_File_tex archivoText($dir."ubicacion.txt","tex");

$num_line count($text_File_tit);

for(
$i=0;$i<$num_line;$i++){

    
//el substr lo uso para quitar el simbolo # del titulo
    
echo "<strong>".substr($text_File_tit[$i],1)."</strong><br />";

    echo 
$text_File_tex[$i];

el problema es que en lugar de que me quite el simbolo # de la primer linea me pone caracteres extraños. Este es el código html que me muestra al ejecutar el código anterior

Código HTML:
<strong>��#Fraccionamiento
</strong><br>Av. Lopez Portillo K.M 21.5 
<br>a 2 minutos de Tierra Maya en dirección a Mérida
<br>
<br><strong>Telefonos
</strong><br>01 (998) 2675682 al 86
<br>
<br><br> 
si quito la funcion substr de esta linea:
Código PHP:
 echo "<strong>".$text_File_tit[$i]."</strong><br />"
el codigo html es el siguiente:

Código HTML:
<strong>#Fraccionamiento
</strong><br>Av. Lopez Portillo K.M 21.5 
<br>a 2 minutos de Tierra Maya en dirección a Mérida
<br>
<br><strong>#Telefonos
</strong><br>01 (998) 2675682 al 86
<br>
<br><br> 
Sin los simbolos raros solo con el #. Ya probe con la funcion utf8_encode y decode con el mismo resultado.

Espero haberme explicado y me puedan ayudar ya que tengo varios dias con este detalle.

Saludos
  #2 (permalink)  
Antiguo 17/08/2011, 13:18
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: caracteres extraños al abrir archivos de texto

Asegurate de lo siguiente
  • 1. Que los archivos "ubicacion.txt" esten guardados como utf-8 sin BOM
  • 2. Que tu php esté guardado como utf-8 sin BOM
  • 3. Que tu php al generar la salida html pase un header con el charset utf-8, ya sea con un meta html o un header() php
  • 4. Revisá que el server no esté pasando algun charset por default que no sea utf-8

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 17/08/2011, 13:31
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: caracteres extraños al abrir archivos de texto

Gracias emprear,

- Ya revise mi archivo de ubicacion.txt y estan guardados como utf-8 sin BOM
- Ya revise el php y esta guardado con utf-8 sin BOM.
- Ya probe incluyendo un meta en html de la siguiente forma <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> y es el unico que charset que tengo.

No se donde o como puede pasar el server un charset por default. Me podrías explicar un poco mas este punto. Gracias

Saludos
  #4 (permalink)  
Antiguo 17/08/2011, 14:08
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: caracteres extraños al abrir archivos de texto

Si estás usando Apache, podrias crear un .htaccess que incluya las directivas

hay varias formas

Código Apache:
Ver original
  1. AddDefaultCharset off
  2. AddCharset utf-8 .txt


Código Apache:
Ver original
  1. AddType 'text/html; charset=UTF-8' html
  2. AddType 'text/plain; charset=UTF-8' txt

otra posibilidad es que renombre tus txt como html, a veces el Server pasa hedaers segun la extensión

Podés hacer otras pruebas como abrir el txt directamente en el navegador, y revisar los encabezados para el mismo.
Hacé igual para el php, para revisar los headers correctamente podés ayudarte con alguna extension del Firefox (yo uso Webdeveloper, que s compatible hasta FF 5)
Lo más probable es que al abrir el txt desde php, lo pase como iso-8859-1

Otra cosa que podria funcionar es agergar a tu php
Código PHP:
Ver original
  1. ini_set("default_charset","utf-8");
  2. header("Content-Type: text/html;charset=utf-8");

Es cuestión de probar, no hay una forma universal porque estás dependiendo de configuraciones manejadas por el administrador de servidor

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 17/08/2011, 14:09
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: caracteres extraños al abrir archivos de texto

¿Y porque usas todo ese royazo de función?
El problema viene por las funciones nativas de php que estás usando para leer y editar la cadena.

No es nada complicado lo que tratas de hacer y así no hay problemas con los caracteres.

Código PHP:
<?php

echo get_data_file("prueba.txt");

function 
get_data_file($path='')
{
    if(
$archivo=file_get_contents($path))
    {
        
$archivo preg_split("/#/",$archivo);
        
        
$texto='';
        foreach(
$archivo as $key1 => $datos)
        {
            
$fila preg_split("/[\s]+/",$datos);
                if(
$key1!=0)
                    
$texto.= "<b>".$fila[0]."</b><br>";
                    
            foreach(
$fila as $key2 => $value)
            {
                if(
$key2!=0$texto.= $value;
                if(
$key2==count($fila)-1$texto.="<br>";
            }
        }
                
        return 
$texto;        
    } 
}
?>
Acabo de hacer el código pero ya ví que funciona correctamente utilizando el texto que pusiste, así que espero te sirva.
Supongo que se entiende bien.

Saludos.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #6 (permalink)  
Antiguo 17/08/2011, 14:31
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: caracteres extraños al abrir archivos de texto

IEKK:
Tu código tiene un pequeña falla, estás removiendo los espacios en blanco, y se vería esto
Código HTML:
Ver original
  1. Av.LopezPortilloK.M21.5a2minutosdeTierraMayaendirecciónaMérida

habria que compensarlo en la linea
Código PHP:
Ver original
  1. if($key2!=0) $texto.= $value;
substituyendo por
Código PHP:
Ver original
  1. if($key2!=0) $texto.= " " . $value;

con lo que obtendrias esto
Código HTML:
Ver original
  1. Av. Lopez Portillo K.M 21.5 a 2 minutos de Tierra Maya en dirección a Mérida
finalmente, agregando al inicio del php

Código PHP:
Ver original
  1. header("Content-Type: text/html;charset=utf-8");

El resultado final sería
Código HTML:
Ver original
  1. Av. Lopez Portillo K.M 21.5 a 2 minutos de Tierra Maya en dirección a Mérida
Es decir, que si no soluciona lo de la codificación, va a seguir teneiendo problemas

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 17/08/2011, 15:20
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: caracteres extraños al abrir archivos de texto

Sí, me falto poner el espacio. Despiste por mi parte al hacerlo sobe la marcha. Gracias por la aclaración.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #8 (permalink)  
Antiguo 17/08/2011, 15:54
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: caracteres extraños al abrir archivos de texto

Muchas gracias por su respuesta.

Probe la solución de IEKK y si me funciono, solo le hice unas ligeras modificaciones para que no me aparezca el salto de línea del inicio.

No conocia la funcion file_get_contents y aun no me queda muy claro lo de expresiones regulares, pero muchas gracias por los tips, se ve mejor el código de IEKK que el mio.

Ahora me toca investigar mas sobre el comentario de emprear y estudiar mas las funciones de IEKK, pero me acaban de abrir los ojos a un mundo de posibilidades. :P

Nuevamente gracias y saludos

Etiquetas: archivo.txt, caracteres, raros
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 20:23.