Lieber Besucher, herzlich willkommen bei: OS X Entwicklerforum.
Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert.
Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können.
Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang.
Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.
PHP XMLReader PCDATA invalid Char
Hallo Leute,
ich parse einen Feed mit dem XMLReader in PHP (der ist so toll schnell!) aber bekomme manchmal (ist auch lustiger weise immer beim selben) diese Error-Meldung:
|
Quellcode
|
1
2
|
XMLReader::read(): http://myfeedurl:22180: parser error : PCDATA invalid Char value 16
|
.
Ich habe das ganze mal mit von der W3C validieren lassen, heraus kam folgendes:
http://validator.w3.org/check?uri=http%3…=Inline&group=0
Könnt ihr mir da vielleicht irgendwie weiterhelfen?
kannst ja mal schauen, ob HTML Tidy das automatisch beheben kann. Im W3C Validator gibts ne Checkbox, dass er HTML-Tidy Ausgabe macht, die kannst Du dann unten mal Copy&Paste durch Dein Skript jagen und schauen, ob das ausreicht. Wenn ja, dann installier Dir einfach HTML Tidy auf dem Server. Gibs vielleicht schon fertig für PHP...
♥C++
Kann ich damit auch Streams parsen? Ich habe nämlich extra den XMLReader genommen um die Daten direkt zu parsen wenn sie reinkommen, nicht erst wenn sie komplett runtergeladen wurden. Aber danke für den Tipp schon mal!
Gute Frage..ich denk fast eher nicht.
Und wenn Du ein SAX Parser nimmst? Die sind ja ohnehin für Streaming gedacht und Du bist mehr oder minder selber für Fehler zuständig. Den konkreten Fehler könntest Du damit wahrscheinlich einfach ignorieren bzw. abfangen.
♥C++
Ich probiere es mal mit der
|
Quellcode
|
1
|
$reader->readInnerXML()
|
-Funktion vom XMLReader, dann muss ich zwar noch temporär einen zweiten Reader einsetzen, aber egal. Muss ich noch irgendwas in der .ini aktivieren? Bekomme folgende Fehlermeldung:
|
Quellcode
|
1
|
Call to undefined function tidy_repair_string()
|
Sorry, keine Ahnung. Ich mach kein PHP. Ich empfehle Python für Webanwendungen. In Python würde ich Beautiful Soup empfehlen. Der frisst alles
♥C++
ich parse einen Feed mit dem XMLReader in PHP (der ist so toll schnell!) aber bekomme manchmal (ist auch lustiger weise immer beim selben) diese Error-Meldung:
|
Quellcode
|
1
|
XMLReader::read(): http://myfeedurl:22180: parser error : PCDATA invalid Char value 16
|
.
Ich habe das ganze mal mit von der W3C validieren lassen, heraus kam folgendes:
http://validator.w3.org/check?uri=http%3…=Inline&group=0
PHP und W3C bemängeln einen Control Character, der da nicht sein sollte – warum beseitigst Du ihn dann nicht einfach?
Carsten
Kann ich damit auch Streams parsen?
Du kannst mit PHP quasi beliebige Stream-Wrapper erzeugen (z.B. einen, der unerwünschte Control Characters rausschmeißt) und diese an XMLReader::open() übergeben.
Carsten
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Nasir« (15. Juni 2011, 20:19)
Bekomme folgende Fehlermeldung:
|
Quellcode
|
1
|
Call to undefined function tidy_repair_string()
|
Zum einen ist die Tidy-Extension nur verfügbar, wenn PHP mit dem Switch
|
Quellcode
|
1
|
--with-tidy
|
kompiliert wurde oder eine entsprechende Library separat kompiliert und im Code geladen wurde.
Daneben stellt sich aber die Frage, was das für eine Funktion sein soll; auf
http://de3.php.net/tidy sucht man jedenfalls vergeblich nach ihr. (Ja, ich weiß, es gibt auch undokumentierte Funktionen, aber die Tidy-Extension ist dafür eigentlich zu alt.)
Carsten
ich versteh was du meinst, weiß aber grade nicht so wirklich wie man so einen Wrapper umsetzten könnte. Kannst du mir da vielleicht kurz helfen? Das wäre echt nett!
ich versteh was du meinst, weiß aber grade nicht so wirklich wie man so einen Wrapper umsetzten könnte. Kannst du mir da vielleicht kurz helfen? Das wäre echt nett!
Die Dokus dazu:
- http://de2.php.net/manual/de/function.stream-wrapper-register.php
- http://de2.php.net/manual/de/stream.streamwrapper.example-1.php
- http://de2.php.net/manual/de/class.streamwrapper.php
Ich schätze, es gibt auch vollständige Beispiele für fertige Stream-Wrapper im Web. Die bieten natürlich andere Funktionalitäten, aber das auf Deine Zwecke abzuändern, dürfte trivial sein.
Carsten
Reicht es dann, wenn ich in meiner Stream-Wrapper-Klasse einfach
|
Quellcode
|
1
|
stream_open()
|
und
|
Quellcode
|
1
|
stream_read()
|
implementiere und dann da tidy drüber jage?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »scriptedSheep« (16. Juni 2011, 10:52)
Das habe ich als Sourcecode aus dem Validator, was ist denn da dran jetzt so böse???
|
Quellcode
|
1
|
Black : Split to 8-small bubbles
|
Falls es noch mal jemanden interessieren sollte der von Google hergeschickt wird oder so, das ganze habe ich nun (recht einfach....) wie folgt gelöst:
|
Quellcode
|
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
|
public function stripInvalidXml($value){
$ret = "";
$current;
if (empty($value))
{
return $ret;
}
$length = strlen($value);
for ($i=0; $i < $length; $i++)
{
$current = ord($value{$i});
if (($current == 0x9) ||
($current == 0xA) ||
($current == 0xD) ||
(($current >= 0x20) && ($current <= 0xD7FF)) ||
(($current >= 0xE000) && ($current <= 0xFFFD)) ||
(($current >= 0x10000) && ($current <= 0x10FFFF)))
{
$ret .= chr($current);
}
else
{
$ret .= " ";
}
}
return $ret;
}
$reader->XML($this->stripInvalidXml(file_get_contents($this->link)));
|
Dank für die Hilfe an alle!
Mhm, vielleicht kannst du mir noch mal kurz helfen was ich in der
|
Quellcode
|
1
|
stream_read()
|
-Methode im Wrapper implementieren muss?