Foros del Web » Programando para Internet » PHP »

Problema de acentos usando ob_start?

Estas en el tema de Problema de acentos usando ob_start? en el foro de PHP en Foros del Web. Saludos, mirar me esta ocurriendo una cosa muy extranya o eso me parece a mi. El caso es que para que no me diera error ...
  #1 (permalink)  
Antiguo 30/07/2005, 11:43
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Problema de acentos usando ob_start?

Saludos, mirar me esta ocurriendo una cosa muy extranya o eso me parece a mi.

El caso es que para que no me diera error la funcion header() he tenido que meter el contenido de una pagina entre ob_start() y ob_end_flush() y no se porque razon al hacer esto me deja de mostrar los caracteres con acentos de forma correcta.

Alguien sabe a que se debe?

Gracias
  #2 (permalink)  
Antiguo 30/07/2005, 12:24
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
Posiblemente sea porque te falta de dar carácteres del ISO:
Código:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
Puede que sea eso, no?
  #3 (permalink)  
Antiguo 30/07/2005, 12:27
Saldu
Invitado
 
Mensajes: n/a
Puntos:
Qué significa eso de <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

Nunca lo entendí... Bueno, gracias.. y porfas explicáme..
  #4 (permalink)  
Antiguo 31/07/2005, 05:15
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Gracias lado2mx pero a ver si no es eso, mira te cuento un poco mas.
Tengo montado un script para controlar los accesos a la web el cual llamo desde todas mis paginas, bien, la funcion header la uso en este script para redireccionar a una pagina de error en caso de que el acceso no sea permitido. El problema ha empezado cuando algunas paginas me tiraban el error "Warning: Cannot modify header information - headers already sent by (output started; etc etc la pagina del script que controla los accesos.php, problema que he solucionado metiendo el contenido de las paginas entre el ob_start() y ob_end_flush() segun he leido el las faqs del foro.

Al hacer esto es cuando me deja de mostrar los acentos y si miro el codigo source de la pagina si aparece <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">.

Que mas puede estar pasando?


Saludos y gracias.
  #5 (permalink)  
Antiguo 31/07/2005, 05:52
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
El texto lo tengo metido en la base de datos "así" y cuando inicio la pagina con el ob_start() y la finalizo con ob_end_flush() todo bien, pero si llamo al script que controla el acceso entonces es cuando muestra los acentos de forma incorrecta. La linea del script que creia que lo causaba era esta:

Código PHP:
if ($punish != 0) {
header("Location: http://www.lapagina.com/error.php?error=THX_1138"); 
exit; 

pero la he sacado y la cosa sigue igual.

Alguna idea please?

Saludos
  #6 (permalink)  
Antiguo 31/07/2005, 13:07
Saldu
Invitado
 
Mensajes: n/a
Puntos:
probaste con

if ($punish != 0) {
echo "<script>window.location='http://www.lapagina.com/error.php?error=THX_1138';</script>";
exit;
}

Espero que te sea útil... adiós!
  #7 (permalink)  
Antiguo 31/07/2005, 14:20
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 12 años, 10 meses
Puntos: 0
¿Por qué depender de JavaScript? Usemos los headers que son gratis :D
Del resto ni idea, nunca usé las funciones ob_x

Suerte
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #8 (permalink)  
Antiguo 31/07/2005, 19:11
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Cuando obtengo este error:
Cita:
Warning: Cannot modify header information - headers already sent by (output started at /home/web/funciones/logs.php:1)
me imprime los acentos mal, si envuelvo la pagina digamos indice.php entre ob_start() y ob_end_flush() entonces no me da el Warning pero sigue imprimiendo los acentos mal.

En el archivo logs.php hay una funcion que no contiene ningun echo ni TAMPOCO la linea del header location que inicialmente os comentaba, las etiquetas <? y ?> no tienen espacios ni delante ni detras respectivamente, he eliminado toda linea comentada y no se que mas puede estar pasando; pero lo que esta claro es que cuando en indice.php hago el include de logs.php los acentos deja de mostrarlos correctamente.

La pregunta es, cuales pueden ser las causas aqui no descritas para obtener este error?
Cita:
Warning: Cannot modify header information - headers already sent by (output started at.....
Saludos
  #9 (permalink)  
Antiguo 31/07/2005, 22:15
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
.... veamos...

Como sabemos, PHP es primero interpretado y cuando finaliza es entregado un resultado. Las funciones ob_start() y ob_end_flush() lo que hacen es forzar la estrega del resultado aúnque no se haya terminado de ejecutar el código (más pensado para aplicaciones que tardan mucho en generarse)... así pués, esto no es propiamente una solución para el "problema" del header(), es, más bien, un "truco"; el error --porque eso es-- seguirá persistiendo...

Personalmente te aconsejaria precindaz de la FAQ y organizes bien tu aplicación. A el redireccionar con header() no tiene sentido imprimir algo en pantalla pués esta pensada para un redireccionamiento "instantáneo", osease, la ejecución se hará en el mismo servidor. Si necesariamente necesitas imprimir algo en pantalla mejor opta por la opción HTML:
Código HTML:
<meta http-equiv="refresh" content="SEGUNDOS; url=PAGINA"> 
.

Bien... todo esto con respecto a el header() y el redireccionamiento... respecto a lo de los acentos no tengo idea a qué se deba ... lo único que se me ocurre es que en alguna página que incluyes --que no me queda claro cuál incluye a cuál-- redefina el charset... de otra manera, en teoria, no tendría por qué cambiarte el comportamiento...

Te invitaría a que muestres el código de cómo lo haces; podrías simplificarlo si es demaciado, solo mostrar las líneas involucradas a tal comportamiento y la forma en que interactuan entre sí los scripts... enlaces en línea para verlo también serían muy útiles...

De verdad no entiendo el por qué, sería interezante descubrirlo . Hasta la próxima!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #10 (permalink)  
Antiguo 01/08/2005, 07:02
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Bueno lo pongo mas facil, pagina indice.php, consultas a la base, muestro informacion con sus acentos correctamente, a la que le escribo esto al principio de la pagina:
Código PHP:
include (RUTA_FUNC."logs.php"); 
me da el siguiente error y deja de mostrar los acentos correctamente.
Cita:
Warning: Cannot modify header information - headers already sent by (output started at /home/web/funciones/logs.php:1)
Pero ahora viene lo bueno, el archivo logs.php ESTA VACIO, no contiene nada, lo he fulminado todo por probar y sigue dando el mismo error. He comprobado que esta en formato UTF8 y no se que mas puede estar sucediendo.

Alguno idea mas?

Saudos
  #11 (permalink)  
Antiguo 02/08/2005, 04:39
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Pero después del include sí imprimes algo...
Cita:
muestro informacion con sus acentos correctamente
Ahí esta todo!...

Insisto en que no tiene sentido imprimir si vaz a redireccionar [header("Location:...")] y por esa parte debes organizarte...

El header() son cabeceras, así como lo es donde defines el charset... el error te dice que ya no puedes modificarlas, entonces tu charset ya no es válido... .

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #12 (permalink)  
Antiguo 02/08/2005, 04:50
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Entiendo lo que dices jam1138 pero como te comentaba en el anterior post ya no estoy redireccionando nada; simplemente es un inculde de un archivo vacio y da ese error, quieres decir que en el momento que hago un include, aunque sea un archivo vacio ya ha enviado una cabecera?

Saludos
  #13 (permalink)  
Antiguo 02/08/2005, 05:24
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
... ¿haces un include con un archivo vacio y te aparece el error??, no debería de ser así... solo debería aparecerte si usas un header() sea para redireccionar o no. Insisto en que muestres código implicado... si no va pa' largo...

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #14 (permalink)  
Antiguo 02/08/2005, 12:58
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Deberia haber un foro con ayuda psicologica para momentos de confusion como la que yo siento ahora. Por alguna razon el formato del archivo logs.php estaba en rtf y al pasarlo a txt todo a vuelto a funcionar, vacio, lleno y con headers. Acojonante.

Gracias por el tiempo dedicado.

Saludos
  #15 (permalink)  
Antiguo 02/08/2005, 19:36
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
Mmmm... no, sino simplemente metiste carácteres vacios, y cuando lo pasaste a txt; obviamente eliminaste el código que tenia en RTF.

El formato RTF te daba el error en el header, porque tiene carácteres de formato que solo en procesadores de textos como WordPad o Word daba ese resultado. simplemente ya no lo pongas y haz todo en txt.

Regla implícita en lo que hagas, incluso en HTML.
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 01:49.