[PHP/XML] Enkele quotes coderen met UTF-8

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de volgende xml file met php gegenereerd:
http://feedvalidator.org/...yrics.shexy.nl%2Ffeed.php

Zoals je ziet krijg ik de volgende error:
'utf8 codec can't decode byte 0x92 in position 671: unexpected code byte (maybe a high-bit character?)'

De php waarmee ik de xml genereer:
PHP:
1
2
3
4
5
6
7
<item>
    <title><?=$r['artist'].' - '. $r['title']; ?></title>
    <link>http://lyrics.shexy.nl/<?=$r['id']. '/'. $r['slug']; ?></link>
    <pubDate><?=$r['dt'];?></pubDate>
    <description><?=$r['content'];?></description>
    <guid>http://lyrics.shexy.nl/<?=$r['id']. '/'. $r['slug']; ?></guid>
</item>


En dan de character encoding die ik gebruik:
PHP:
1
2
header('Content-type: text/xml; charset=UTF-8');
echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";


Nu heb ik al verschillende dingen geprobeerd:
PHP:
1
2
3
4
5
htmlentities($r['content']);
htmlentities($r['content'], ENT_QUOTES);
htmlspecialchars($r['content']);
htmlspecialchars($r['content'], ET_QUOTES);
addslashes() etc...


Daarnaast heb ik ook zitten spelen met de iso-8859-1 encoding.
Maar tot op heden niet de juist oplossing om de enkele quotes goed geencode te krijgen.
Zit iemand wat ik fout doe?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
2
3
foreach ($r as $k => $v) {
  $r[$k] = utf8encode($v);
}

:?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Vergeten te vermelden, maar die had ik ook geprobeerd.

Resulteer in:

line 23, column 3: description contains bad characters (203 occurrences) [help]

You\x92ve brought me back and now you\x92re making me high

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
misschien een typfout toe je het hier gebruikte, maar je vergeet een N in htmlspecialchars($r['content'], ET_QUOTES);

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

PHP:
1
htmlspecialchars ($text, ENT_QUOTES, 'UTF-8');


Dit moet wel goed zijn volgens mij, dat gebruik ik zelf ook in een dergelijke setting. :)

Zie ook de omschrijving van de functie in de manual:
string htmlspecialchars ( string string [, int quote_style [, string charset]] )

[ Voor 45% gewijzigd door Superdeboer op 20-03-2006 01:25 ]

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik doe iets fout of ik zie iets over het hoofd. Dit is de php die de rss genereerd:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?
require_once('connect.php');

header('Content-type: text/xml; charset=UTF-8');
echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
?>

<rss version="2.0">
<channel>
    <title>Lyrics</title>
    <link>http://www.url.coml/</link>
    <description>Lyrics</description>
    <pubDate>Mon, 20 Feb 2006 18:49:26 +0000</pubDate>
    <language>en</language>

    <?
    $query = "SELECT *,
             DATE_FORMAT(dt, '%a, %d %b %Y %h:%i:%s +0100') AS dt 
             FROM lyrics
             ORDER BY id
             DESC LIMIT 2";
             
    if ($result = mysql_query($query))
    {
        while ($r = mysql_fetch_array($result))
        {
    ?>
            <item>
                <title><?=htmlentities($r['artist']).' - '. htmlentities($r['title']); ?></title>
                <link>http://www.url.com/<?=$r['id']. '/'. $r['slug']; ?></link>
                <pubDate><?=$r['dt'];?></pubDate>
                <description><?=htmlspecialchars($r['content'], ENT_QUOTES, 'UTF-8'); ?></description>
                <guid>http://www.url.com/<?=$r['id']. '/'. $r['slug']; ?></guid>
            </item>
    <?
        }
    }
    ?>

</channel>
</rss>


Het staat ook gewoon met enkele quotes in de Databse:
You've brought me back and now you're making me high


Dit resulteert in het volgende:
http://feedvalidator.org/...yrics.shexy.nl%2Ffeed.php

[ Voor 70% gewijzigd door Verwijderd op 20-03-2006 08:08 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

En als je die enkele quotes eens letterlijk door hun HTML-entity vervangt door middel van str_replace? Werkt het dan wel? Of blijft ie dan nog zeuren?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Het karakter 0x92 is niet gedefinieerd binnen ISO-8859-1 en is een controle karakter binnen Unicode; het is alleen gedefinieerd binnen de Windows-1252 codepage. (Edit: het is - in het geval van de ’ - binnen Windows-1252 als 0x92 gedefinieerd).

Gebruik bijvoorbeeld deze functie om Windows-1252 naar UTF-8 om te zetten.

[ Voor 15% gewijzigd door Icelus op 20-03-2006 10:28 ]

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Gebruik bijvoorbeeld deze functie om Windows-1252 naar UTF-8 om te zetten.
Perfect, hij werkt! Thanx

(Ik had) die functie wel gezien maar eerlijk gezegd geen aandacht aan geschonken)

Acties:
  • 0 Henk 'm!

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 17-09 22:52
is het dan niet netter om iconv te gebruiken ? als het goed is doet die ook cp1252...
Pagina: 1