RSS/XML uitlezen
Ik maak gebruik van de XML/RSS reader volgens het script op http://www.phphulp.nl/php/scripts/7/337/
Het "probleem" is dat wanneer er bijzondere tekens in het XML/RSS bestand komen de output van $data fout gaat. Hetzelfde probleem doet zich voor wanneer er een & -teken in $data staat, dan wordt de tekst ervoor weggeknipt.
Hoe kan dit worden opgelost????
& vervangen door & (is maar een gok, ik ken geen XML)
Dat werkt dus niet, want in het script wordt het XML/RSS bestand gelezen en niet geschreven. Oftewel vervangen gaat niet.
Misschien dat die van han hem wel eet, die maakt namelijk niet gebruik van een xml parser, maar een eigen gemaakte.
En je kan ook gewoon voordat je de inhoud in je parser stopt er str_replace op loslaten, die dan & vervangt in &
Bijvoorbeeld, de volgende tekst wordt opgehaald via de parser uit $data:
De 'nieuwe' internetsite is een succes
Als deze informatie in $data staat en vervolgens wordt verplaatst naar bv $titel dan valt alles weg en zal de string nog slechts hetvolgende bevatten:
' internetsite is een succes
Dit is de oorzaak maar hoe kan dit, dit zal toch niet mogen kunnen bij strings?
----------
Mijn script is als volgt, probeer het en zie dat de titels wegvallen, net als sommige delen van de tekst.
Code (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?
// Starten
if (!($fp=@fopen("http://www.tweakers.net/feeds/nieuws.xml", "r"))) {
die ("Kan het XML/RSS bestand niet openen.");
}
$usercount=0;
$userdata=array();
$state='';
if (!($xml_parser = xml_parser_create())) {
die("De XML Parser wordt niet ondersteund.");
}
// Functie aanmaken (voordat ie gebruikt kan worden)
function startElementHandler ($parser,$name,$attrib) {
global $check;
global $checktitle;
global $checklink;
global $checkbeschr;
global $checktauteur;
global $checkcat;
global $checkdate;
if ($check=='true') {
if ($name=="TITLE") { $checktitle = 'true'; } else { $checktitle = 'false'; }
if ($name=="LINK") { $checklink = 'true'; } else { $checklink = 'false'; }
if ($name=="DESCRIPTION") { $checkbeschr = 'true'; } else { $checkbeschr = 'false'; }
if ($name=="AUTHOR") { $checktauteur = 'true'; } else { $checktauteur = 'false'; }
if ($name=="CATEGORY") { $checkcat = 'true'; } else { $checkcat = 'false'; }
if ($name=="PUBDATE") { $checkdate = 'true'; } else { $checkdate = 'false'; }
}
if ($name=="ITEM") { $check = 'true'; }
}
// Functie aanmaken (voordat ie gebruikt kan worden)
function endElementHandler ($parser,$name) {
global $check;
global $checktitle;
global $checklink;
global $checkbeschr;
global $checktauteur;
global $checkcat;
global $checkdate;
if ($check=='true') {
if ($name=="TITLE") { $checktitle = 'false'; } else { $checktitle = 'false'; }
if ($name=="LINK") { $checklink = 'false'; } else { $checklink = 'false'; }
if ($name=="DESCRIPTION") { $checkbeschr = 'false'; } else { $checkbeschr = 'false'; }
if ($name=="AUTHOR") { $checktauteur = 'false'; } else { $checktauteur = 'false'; }
if ($name=="CATEGORY") { $checkcat = 'false'; } else { $checkcat = 'false'; }
if ($name=="PUBDATE") { $checkdate = 'false'; } else { $checkdate = 'false'; }
}
if ($name=="ITEM") { $check = 'true'; }
}
// Functie aanmaken (voordat ie gebruikt kan worden)
function characterDataHandler ($parser, $data) {
global $check;
global $checktitle;
global $titel;
global $checklink;
global $link;
global $checkbeschr;
global $checktauteur;
global $checkcat;
global $checkdate;
global $beschr;
global $auteur;
global $cat;
global $datum;
global $i;
if ($check=="true") {
}
if ($checktitle=='true') { $titel=$data; }
if ($checklink=='true') { $link=$data; }
if ($checkbeschr=='true') { $beschr=$data; }
if ($checktauteur=='true') { $auteur=$data; }
if ($checkcat=='true') { $cat=$data; }
if ($checkdate=='true') { $datum=$data; }
if ($checkdate=='true') {
if ($i<10) {
echo "<a href=\"".$link."\">".$titel."</a></b><br>";
echo $beschr."<br>";
echo "<br>";
$i++;
// Resetten van de variable (veiligheids maatregel)
$titel='';
$link='';
}
}
}
// Doorstart van het script met de functies van hierboven
xml_set_element_handler($xml_parser,"startElementHandler","endElementHandler");
xml_set_character_data_handler( $xml_parser, "characterDataHandler");
while( $data = fread($fp, 4096)) { // Die 4096 slaat op 1 regel per keer
if(!xml_parse($xml_parser, $data, feof($fp))) {
break;
}
}
// Sluit de parser af
xml_parser_free($xml_parser);
//Einde script
?>
// Starten
if (!($fp=@fopen("http://www.tweakers.net/feeds/nieuws.xml", "r"))) {
die ("Kan het XML/RSS bestand niet openen.");
}
$usercount=0;
$userdata=array();
$state='';
if (!($xml_parser = xml_parser_create())) {
die("De XML Parser wordt niet ondersteund.");
}
// Functie aanmaken (voordat ie gebruikt kan worden)
function startElementHandler ($parser,$name,$attrib) {
global $check;
global $checktitle;
global $checklink;
global $checkbeschr;
global $checktauteur;
global $checkcat;
global $checkdate;
if ($check=='true') {
if ($name=="TITLE") { $checktitle = 'true'; } else { $checktitle = 'false'; }
if ($name=="LINK") { $checklink = 'true'; } else { $checklink = 'false'; }
if ($name=="DESCRIPTION") { $checkbeschr = 'true'; } else { $checkbeschr = 'false'; }
if ($name=="AUTHOR") { $checktauteur = 'true'; } else { $checktauteur = 'false'; }
if ($name=="CATEGORY") { $checkcat = 'true'; } else { $checkcat = 'false'; }
if ($name=="PUBDATE") { $checkdate = 'true'; } else { $checkdate = 'false'; }
}
if ($name=="ITEM") { $check = 'true'; }
}
// Functie aanmaken (voordat ie gebruikt kan worden)
function endElementHandler ($parser,$name) {
global $check;
global $checktitle;
global $checklink;
global $checkbeschr;
global $checktauteur;
global $checkcat;
global $checkdate;
if ($check=='true') {
if ($name=="TITLE") { $checktitle = 'false'; } else { $checktitle = 'false'; }
if ($name=="LINK") { $checklink = 'false'; } else { $checklink = 'false'; }
if ($name=="DESCRIPTION") { $checkbeschr = 'false'; } else { $checkbeschr = 'false'; }
if ($name=="AUTHOR") { $checktauteur = 'false'; } else { $checktauteur = 'false'; }
if ($name=="CATEGORY") { $checkcat = 'false'; } else { $checkcat = 'false'; }
if ($name=="PUBDATE") { $checkdate = 'false'; } else { $checkdate = 'false'; }
}
if ($name=="ITEM") { $check = 'true'; }
}
// Functie aanmaken (voordat ie gebruikt kan worden)
function characterDataHandler ($parser, $data) {
global $check;
global $checktitle;
global $titel;
global $checklink;
global $link;
global $checkbeschr;
global $checktauteur;
global $checkcat;
global $checkdate;
global $beschr;
global $auteur;
global $cat;
global $datum;
global $i;
if ($check=="true") {
}
if ($checktitle=='true') { $titel=$data; }
if ($checklink=='true') { $link=$data; }
if ($checkbeschr=='true') { $beschr=$data; }
if ($checktauteur=='true') { $auteur=$data; }
if ($checkcat=='true') { $cat=$data; }
if ($checkdate=='true') { $datum=$data; }
if ($checkdate=='true') {
if ($i<10) {
echo "<a href=\"".$link."\">".$titel."</a></b><br>";
echo $beschr."<br>";
echo "<br>";
$i++;
// Resetten van de variable (veiligheids maatregel)
$titel='';
$link='';
}
}
}
// Doorstart van het script met de functies van hierboven
xml_set_element_handler($xml_parser,"startElementHandler","endElementHandler");
xml_set_character_data_handler( $xml_parser, "characterDataHandler");
while( $data = fread($fp, 4096)) { // Die 4096 slaat op 1 regel per keer
if(!xml_parse($xml_parser, $data, feof($fp))) {
break;
}
}
// Sluit de parser af
xml_parser_free($xml_parser);
//Einde script
?>