RSS feed speciale karakters

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • sweebee
  • Registratie: Oktober 2008
  • Laatst online: 15:18
Ik heb een rss feed die gegenereerd wordt met php. De berichten worden uit een mysql database gehaald. De berichten staan in de database ingesteld als 'utf8_general_ci'.

In het php scriptje begin in met een header:

code:
1
header("Content-Type: application/rss+xml; charset=UTF-8");


vervolgens begin ik de rss string met:
code:
1
2
3
$rssfeed = '<?xml version="1.0" encoding="UTF-8" ?>';
$rssfeed .= '<rss version="2.0">';
etc.


Alleen worden speciale karakters niet getoond zoals: €, ü. Echo ik de string zonder rss, dus gewoon in de browser dan zie ik de speciale karakters wel.

Ook wanneer ik '€' in de string zet in het php bestand wordt die wel getoond in de feed, maar dus uit de database niet.

Alle reacties


Acties:
  • +3 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
UTF 8 betekent niet perse dat alle tekens ook gewoon in je XML gebruikt mogen worden: http://stackoverflow.com/...-you-make-strings-xmlsafe

Overigens NOOIT zelf XML aan elkaar concatenaten. Je maakt erg makkelijk fouten die met je test data (zonder speciale chars) waarschijnlijk niet aan het licht komen maar met echte data opeens zorgen dat je invalid XML uitspuugt. Heb in m'n carriere al meerdere malen flink boos moeten worden omdat wat zij claimen XML was gewoon text was met XML tags erin. Elke XML library regelt dat zelf voor je.

https://niels.nu


Acties:
  • +1 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:36

Janoz

Moderator Devschuur®

!litemod

Los van de valide punten van Hydra, als je een € in je php source zet en alles ook netjes als UTF-8 opgeslagen is en het dan inderdaad werkt, dan zul je het toch moeten zoeken in de koppeling met de database. Weet je zeker dat je verbinding met MySQL ook zo ingesteld is dat je ej data daadwerkelijk als UTF-8 binnen krijgt?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • sweebee
  • Registratie: Oktober 2008
  • Laatst online: 15:18
De output van
code:
1
mysql_client_encoding();
toont latin1 terwijl alles op utf-8 (utf8_general_ci) staat in mysql.

Kan ik dit nog ergens wijzigen?

Acties:
  • 0 Henk 'm!

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 07-10 22:02
Wat Janoz zegt.
De collation die je instelt in je database/tabel/kolom zegt helemaal niks over de connectie die je opzet.
Afhankelijk van je serverconfiguratie (mysql-configuratie, php-configuratie en php-db-extensie config) moet je de character-encoding die je wilt gebruiken expliciet setten.

Het is afhankelijk van de db-extensie en -versie die je gebruikt hoe je dat moet doen. Bijv:
PHP:
1
2
3
4
5
6
7
8
9
10
//PDO; PHP > 5.3.6 
$conn = new PDO("mysql:host=localhost;dbname=database;charset=utf8", "username", "password");

//PDO; PHP < 5.3.6
$conn = new PDO("mysql:host=localhost;dbname=database", "username", "password",
         array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

//mysqli
$conn = new mysqli("localhost", "username", "password", "database");
$conn->set_charset("utf8")


Overigens zegt de collation in principe ook niks over de character set van een database/tabel/column. De collation bepaalt alleen de manier waarop mysql de data vergelijkt en sorteert:
A character set is a set of symbols and encodings. A collation is a set of rules for comparing characters in a character set.
[...]
MySQL can do these things for you:
Mix strings with different character sets or collations in the same server, the same database, or even the same table.
In de praktijk zul je bijna altijd zien dat je charset en collation wel overeenkomen hoor; maar dat hoeft dus niet persé zo te zijn.

Wat Hydra zegt is ook helemaal waar: zelf xml gaan samenstellen is vragen om problemen en daarom een slecht idee.
Neem eens een kijkje naar de verschillende XML-libaries die je voor PHP kan gebruiken. Voor simpele, relatief kleine XML's zou ik SimpleXML, voor grotere files of geavanceerdere mogelijkheden XMLWriter.