Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 16 Abril 2010, 01:07 am



Título: Problemas con palabras acentuadas en FEED
Publicado por: Diabliyo en 16 Abril 2010, 01:07 am
Buen día.

Tengo un CMS en donde proporciono un archivo rss.php para que los usuarios tengan el servicio de feed, pero tengo problemas para con las palabras centuadas :(.

Les proporciono un enlace a FeedValidator donde intento validar un web que tengo y se puede ver el problema.

Enlace: http://feedvalidator.org/check.cgi?url=http%3a%2f%2fpodcast.sie-group.net%2frss.php (http://feedvalidator.org/check.cgi?url=http%3a%2f%2fpodcast.sie-group.net%2frss.php).

Implemento una funcion simple para facilitar todo el proceso de mostrar texto al usuario, y tambien la utilizo para el Feed, la funcion se llama proteger_cadena() y dentro utilizo tres funciones que son: strip_tags, htmlentities y utf8_encode. Pero el problema continua :(

Saludos !


Título: Re: Problemas con palabras acentuadas en FEED
Publicado por: дٳŦ٭ en 18 Abril 2010, 01:32 am
amm  ya probaste con un str_replace y con los cdatas?


Título: Re: Problemas con palabras acentuadas en FEED
Publicado por: Diabliyo en 18 Abril 2010, 06:00 am
amm  ya probaste con un str_replace y con los cdatas?

No entiendo que quieres darme a entender :S...

Bueno en fin, los soluciones simplemente colocando un utf8 encode y listo... seria algo asi:

Ejm: asumiendo que el texto tiene palabras acentuadas, le pasamos esto:

Código
  1. utf8_encode( htmlentities($texto, ENT_QUOTES) );



Título: Re: Problemas con palabras acentuadas en FEED
Publicado por: Cuantico en 23 Abril 2010, 02:28 am
No solamente acentuadas, todas de las del diccionario de utf-8...

Good..


Título: Re: Problemas con palabras acentuadas en FEED
Publicado por: Nakp en 23 Abril 2010, 04:23 am
wtf x_x quantic


Título: Re: Problemas con palabras acentuadas en FEED
Publicado por: WHK en 23 Abril 2010, 08:28 am
Observa la petición completa que pude capturar desde live headers:

Código:
http://podcast.sie-group.net/rss.php

GET /rss.php HTTP/1.1
Host: podcast.sie-group.net
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.5pre) Gecko/20100417 Ubuntu/9.10 (karmic) Namoroka/3.6.5pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive

HTTP/1.1 200 OK
Date: Fri, 23 Apr 2010 06:21:49 GMT
Server: Apache
Keep-Alive: timeout=15, max=97
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/xml

En ningún lado el servidor responde el tipo de codificación a utilizar.
Cuando utilizamos acentos y eñes debemos usar la codificación ISO-8859-1:

Código
  1. <?php header('Content-Type: text/xml; charset=ISO-8859-1'); ?>

Ahora ya podemos insertar acentos y el validador debería aceptarnos por standard, si no lo acepta es error del validador.

En el header del xml también debe ir declarado al igual que en el html:
Código
  1. <?xml version="1.0" encoding=ISO-8859-1"?>

ya que tu rss tiene header de utf-8:
Código
  1. <?xml version="1.0" encoding="UTF-8"?>

Recuerda que si le escribes un acento desde tu pc con codificación iso88591 sobre una web con utf8 aparecerán simbolos en ves de acentos y eñes, por ejemplo también puedes escribir © sin la necesidad de escribir  &copy;

vee el código fuente del foro y fijate que en el header del html dice:
Código
  1. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

y en el header:
Código:
https://foro.elhacker.net/

GET / HTTP/1.1
Host: foro.elhacker.net
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.5pre) Gecko/20100417 Ubuntu/9.10 (karmic) Namoroka/3.6.5pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
If-Modified-Since: Fri, 23 Apr 2010 06:18:42 GMT


HTTP/1.1 200 OK
Date: Fri, 23 Apr 2010 06:30:57 GMT
Server: Apache
X-FRAME-OPTIONS: DENY
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: private
Pragma: no-cache
Last-Modified: Fri, 23 Apr 2010 06:30:57 GMT
Content-Encoding: gzip
Vary: Accept-Encoding
Keep-Alive: timeout=3, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1

te fijas?
Código:
Content-Type: text/html; charset=ISO-8859-1