|
|
Pretender


: 22.04.2004 : 1077 : Naumburg
|
| : 13.01.2005, 02:27 : htmlentities oder htmlspecialchars |
|
|
Moin Moin an alle PHP Experten!
ich habe da mal ein kleineres problem.
Ich habe ein UTF8 XML Seite die ich mit folgenden Script auslese:
[php]
<?php
$rdffile = "Hier steht die XML URL";
$content = implode ("", file ($rdffile));
preg_match_all("|<product(.*)>(.*)</product>|Uism",$content, $items, PREG_PATTERN_ORDER);
for ($i=0;$i<count($items[0]);$i++)
{ preg_match_all(
"|<name>(.*)</name>(.*)<description>(.*)</description>(.*)<imageUrl>(.*)</imageUrl>(.*)<productUrl>(.*)</productUrl>(.*)<price>(.*)</price>(.*)<currency>(.*)</currency>|Uism",$items[0][$i], $regs, PREG_PATTERN_ORDER);
echo
"<img src='".$regs[5][0]."'>
".$regs[1][0]."
".$regs[3][0]."<br>
Preis: ".$regs[9][0]."
".$regs[11][0]."
<br>
<a href='".$regs[7][0]."' target='_blank'>Klicken Sie hier für alle Details</a><br><br><br><br><br><br><br>\n"; }
?>
[/php]
auf meiner Seit werden nun die Sonderzeichen nicht umgewandelt und ich bekomme folgenden Text angezeigt:
<!--Textanfang-->
Intel&reg; Pentium&reg; D Prozessor 710 (1.40 GHz, 2 MB Cache, 400 MHz FSB)+15.0 XGAMicrosoft&reg; Windows&reg; XP Home
<!--Textende-->
Mit wurde gesagt das ich es mit htmlspecialchars oder htmlentities versuchen soll.
Da ich nun allerdings nicht so ganz fit bin in PHP...
Wie müsste das obige Script aussehen um die UTF8 Seite in 8859-1 (nehme ich an) gewandelt zu werden?
Vielen Dank an alle!
bye Pretender |
|
| Nach oben |
|
 |
MikeD


: 12.08.2004 : 112 : Idar-Oberstein
|
| : 13.01.2005, 10:41 : htmlentities oder htmlspecialchars |
|
|
Sieht so aus als ob deine '&' als & auftauchen - also anstatt ® kommt &reg raus.
Versuch mal :
| Code: |
| $content = preg_replace('/&#(x[a-f0-9]+|[0-9]+);/i', '&#$1;', $content); |
hinter der dritten zeile: nicht getestet.
Gruß Mike
Morgen sag ich zu heute gestern und gleich zu jetzt eben - da wart ich doch lieber bis morgen um zu sagen wie spät es gestern über Tag war. |
|
| Nach oben |
|
 |
Pretender


: 22.04.2004 : 1077 : Naumburg
|
| : 13.01.2005, 13:04 : htmlentities oder htmlspecialchars |
|
|
Moin Moin,
Ich habe der 3. Zeile Deinen Codeschnipsel angehängt.
| Code: |
$content = implode ("", file ($rdffile));$content = preg_replace('/&#(x[a-f0-9]+|[0-9]+);/i', '&#$1;', $content);
|
funktioniert leider nicht. Die Darstellung von & ® und anderen Sonderzeichen wird immernoch falsch wiedergegeben.
mfg
Pretender
bye Pretender |
|
| Nach oben |
|
 |
MikeD


: 12.08.2004 : 112 : Idar-Oberstein
|
| : 13.01.2005, 23:55 : htmlentities oder htmlspecialchars |
|
|
probiers mal damit:
| Code: |
$content = ereg_replace('&', '&', $content);
|
hatte den regulären Ausdruck des anderen code nicht überprüft - so früh morgens fast unmöglich - war den ganzen tag unterwegs - deshalb die späte antwort.
Gruß Mike
Morgen sag ich zu heute gestern und gleich zu jetzt eben - da wart ich doch lieber bis morgen um zu sagen wie spät es gestern über Tag war. |
|
| Nach oben |
|
 |
Pretender


: 22.04.2004 : 1077 : Naumburg
|
| : 14.01.2005, 01:25 : htmlentities oder htmlspecialchars |
|
|
moin moin,
schau dir den code mal an:
| Code: |
<?php
$rdffile = "hier steht die url der xml seite";
$content = implode ("", file ($rdffile));
$content = ereg_replace('&', '&', $content);
preg_match_all("|<product>(.*)</product>|Uism",$content, $items, PREG_PATTERN_ORDER);
for ($i=0;$i<count($items[1]);$i++)
{ preg_match_all(
"|<name>(.*)</name>(.*)<description>(.*)</description>(.*)<imageUrl>(.*)</imageUrl>(.*)<productUrl>(.*)</productUrl>(.*)<price>(.*)</price>(.*)<currency>(.*)</currency>|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
$regs[3][0] = str_replace ("&","&",$regs[3][0]);
$regs[11][0] = str_replace ("&","&",$regs[11][0]);
$regs[3][0] = str_replace ("reg;","®",$regs[3][0]);
$regs[11][0] = str_replace ("reg;","®",$regs[11][0]);
echo
"<img align=left width=110 height=110 src='".$regs[5][0]."'>
".utf8_decode($regs[1][0])."
".utf8_decode($regs[3][0])."<br>
Preis: ".utf8_decode($regs[9][0])."
".utf8_decode($regs[11][0])."
<br>
<a href='".utf8_decode($regs[7][0])."' target='_blank'>Klicken Sie hier für alle Details</a><br><br><br><br><br><br><br>\n"; }
?> |
ich hatte schon einge zeit damit rumzuspielen. wenn ich deine zeile mit einfügt passiert im grunde garnichts. die ausgabe bleibt die selbe!
"&®" ist nun das was ausgegebn wird.
das problem scheint, das dass sonderzeichen "®" aus zwei zeichen zusammengesetzt werden muss. aus dem "&" und aus dem "reg;"
aus dem "&" wird dann ein "&" und ein "reg;" was zusammen "®" wäre und im grunde eine "®" ergeben sollte.
das interessante ist, wenn ich NUR das "reg;" hätte, dann gäbe es keine probleme. allerdnings sind da noch andere zeichen. im grunde liegt es wohl an den charset utf-8 was umgewandelt werden muss. ä, ü , ö werden auch falsch dargestellt.
hier kannst du dir das ergbebnis mal genau anschauen.
http://www.laptop-laptop.de/test.php <--- testseite!
auf der rechten seite der testseite, steht die ausgabe mit den script von hier.
ich hoffe du hast verstanden was ich meine
bis denne
bye Pretender |
|
| Nach oben |
|
 |
MikeD


: 12.08.2004 : 112 : Idar-Oberstein
|
| : 14.01.2005, 02:21 : htmlentities oder htmlspecialchars |
|
|
| Code: |
$regs[3][0] = str_replace ("&","&",$regs[3][0]);
$regs[11][0] = str_replace ("&","&",$regs[11][0]);
$regs[3][0] = str_replace ("reg;","®",$regs[3][0]);
$regs[11][0] = str_replace ("reg;","®",$regs[11][0]);
|
mach mal ne kopie von der php und nimm die zeilen raus - damit machst du das replace ja doppelt gemoppelt
um den utf-8 generell zu wandeln kenn ich leider keine Lösung - evtl. weiß da jemand etwas oder hat die fertigen strings parat, aber wenn du selbst hand anlegen willst, bis du alle hast:
| Code: |
$search = array('zuersetzen1', 'zuersetzen2');
$replace = array('ersetzenmit1', 'ersetzenmit2');
$content = str_replace($search, $replace, $content);
|
reihenfolge beachten und jeweils mit ,'etwas' erweitern - die drei zeilen dann anstatt der einen einsetzen.
Gruß Mike
Morgen sag ich zu heute gestern und gleich zu jetzt eben - da wart ich doch lieber bis morgen um zu sagen wie spät es gestern über Tag war. |
|
| Nach oben |
|
 |
Pretender


: 22.04.2004 : 1077 : Naumburg
|
| : 15.01.2005, 14:13 : htmlentities oder htmlspecialchars |
|
|
Moin Moin,
| Code: |
<?php
$rdffile = "hier steht die URL der XML Seite";
$content = implode ("", file ($rdffile));
preg_match_all("|<product>(.*)</product>|Uism",$content, $items, PREG_PATTERN_ORDER);
for ($i=0;$i<count($items[1]);$i++)
{ preg_match_all(
"|<name>(.*)</name>(.*)<description>(.*)</description>(.*)<imageUrl>(.*)</imageUrl>(.*)<productUrl>(.*)</productUrl>(.*)<price>(.*)</price>(.*)<currency>(.*)</currency>|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
$search = array('&', 'reg;');
$replace = array('&', 'reg;');
$content = str_replace($search, $replace, $content); echo
"<img align=left width=110 height=110 alt=Laptop&nbsp;von&nbsp;Fujitsu&nbsp;Siemens&nbsp;im&nbsp;Laptop&nbsp;Shop src='".$regs[5][0]."'>
<h1>".utf8_decode($regs[1][0])."</h1>
".utf8_decode($regs[3][0])."<br>
Preis: ".utf8_decode($regs[9][0])."
".utf8_decode($regs[11][0])."
<br>
<a href='".utf8_decode($regs[7][0])."' target='_blank'>Klicken Sie hier für alle Details</a><br><br><br><br><br><br><br>\n"; }
?> |
Also mit diesem Script, funktioniert es leider auch nicht.
wäre das jetzt der richtige script? ich habe so viele verschiedene Möglichkeiten versucht, ich weiss nicht mehr was richtig oder falsch war.
hilf mir bitte nochmal
vielen Dank
bye Pretender |
|
| Nach oben |
|
 |
MikeD


: 12.08.2004 : 112 : Idar-Oberstein
|
| : 15.01.2005, 14:45 : htmlentities oder htmlspecialchars |
|
|
| Code: |
<?php
$rdffile = "Hier steht die XML URL";
$content = implode ("", file ($rdffile));
$search = array('&');
$replace = array('&');
$content = str_replace($search, $replace, $content);
preg_match_all("|<product(.*)>(.*)</product>|Uism",$content, $items, PREG_PATTERN_ORDER);
for ($i=0;$i<count($items[0]);$i++)
{ preg_match_all(
"|<name>(.*)</name>(.*)<description>(.*)</description>(.*)<imageUrl>(.*)</imageUrl>(.*)<productUrl>(.*)</productUrl>(.*)<price>(.*)</price>(.*)<currency>(.*)</currency>|Uism",$items[0][$i], $regs, PREG_PATTERN_ORDER);
echo
"<img src='".$regs[5][0]."'>
".$regs[1][0]."
".$regs[3][0]."<br>
Preis: ".$regs[9][0]."
".$regs[11][0]."
<br>
<a href='".$regs[7][0]."' target='_blank'>Klicken Sie hier für alle Details</a><br><br><br><br><br><br><br>\n"; }
?>
|
jou - du hattest noch das utf8_decode eingebaut - das ersetzen an der falschen stelle usw.
Probier mal den code ersatzweise aus - hab dein erstes posting genommen und es eingebaut (btw. 'reg;' mit 'reg;' zu ersetzen ist wie ein ei wegnehmen und wieder hinlegen - zwei unnötige Arbeitsschrittte )
wenn du nach dem einbau noch irgendwas siehst, was nicht korrekt ist, dann die regeln erweitern um die entsprechenden Zeichen und deren Ersatz.
Gruß Mike
Morgen sag ich zu heute gestern und gleich zu jetzt eben - da wart ich doch lieber bis morgen um zu sagen wie spät es gestern über Tag war. |
|
| Nach oben |
|
 |
Pretender


: 22.04.2004 : 1077 : Naumburg
|
| : 15.01.2005, 16:56 : htmlentities oder htmlspecialchars |
|
|
Hallo Mike,
Vielen Dank erst einmal für Deine Mühe!
soweit macht das Script schon fast was es machen soll.
Ich habe es erweitert und zwa mit:
| Code: |
$search = array('&' , 'reg;');
$replace = array('&' , '®');
|
die Ausgabe ist nun:
[Text]
&®
[/Text]
Normal sollte aber aus "&reg;" das genannte sonderzeichen werden.
Daher habe ich folgendes versucht!
| Code: |
$search = array('&reg;');
$replace = array('®');
|
Aber ohne Erfolg. Es muss irgendwie aus den 2 zeichen, eins gemacht werden dann kann man das sicher auch auf umlaute anwenden.
haste du vieleicht noch eine andere Idee?
bye Pretender |
|
| Nach oben |
|
 |
Jörg

: 03.07.2003 : 1192 : Göttingen
|
| : 15.01.2005, 20:28 : htmlentities oder htmlspecialchars |
|
|
Die Codierung:
entsteht, wenn man zweimal hintereinander htmlentities() auf ® anwendet
rückgängig macht man das, wenn man zweimal hintereinander die Umkehrfunktion html_entity_decode() anwendet
danach kann man ® und andere Zeichen mit einer Funktion wie dieser in UTF8 codieren (dort fehlt allerdings noch das ®)
Edit:
ich habe es glaub ich zuerst missverstanden, dir geht es um eine Ausgabe in HTML?
dann reicht einmal die Funktion html_entity_decode(), um aus einem &reg; ein ® zu machen
Suchmaschinenoptimierte Forensoftware Webmaster-Forum |
|
| Nach oben |
|
 |
Pretender


: 22.04.2004 : 1077 : Naumburg
|
| : 15.01.2005, 21:29 : htmlentities oder htmlspecialchars |
|
|
moin,
um es als html ausgabe ins "®" zu machen, ist nicht so das problem, das problem ist, dass es nicht im quellcode als "®" steht sondern als "&reg;"
der Browser wandelt es dann in erst in ein "®"
tjo... kein ahnung wie ichs machen soll.
bye Pretender |
|
| Nach oben |
|
 |
Jörg

: 03.07.2003 : 1192 : Göttingen
|
| : 15.01.2005, 21:40 : htmlentities oder htmlspecialchars |
|
|
Mit HTML Ausgabe meinte ich ja den HTML-Quellcode (im Gegensatz zur XML-Ausgabe)
html_entity_decode() macht aus "&reg;" "®"
und der Browser macht aus "®" "®"
Suchmaschinenoptimierte Forensoftware Webmaster-Forum |
|
| Nach oben |
|
 |
Pretender


: 22.04.2004 : 1077 : Naumburg
|
| : 15.01.2005, 22:09 : htmlentities oder htmlspecialchars |
|
|
ok, kannst du mir eventuell das html_entity_decode in den obigen script einfügen? ich bin nicht so der php experte.
wäre scht supi fein 
bye Pretender |
|
| Nach oben |
|
 |
Jörg

: 03.07.2003 : 1192 : Göttingen
|
| : 15.01.2005, 22:30 : htmlentities oder htmlspecialchars |
|
|
Probier es mal so:
<?php
$rdffile = "Hier steht die XML URL";
$content = implode ("", file ($rdffile));
$content = html_entity_decode($content);
preg_match_all("|<product(.*)>(.*)</product>|Uism",$content, $items, PREG_PATTERN_ORDER);
/* ... weiter im Code... */
?>
Suchmaschinenoptimierte Forensoftware Webmaster-Forum |
|
| Nach oben |
|
 |
Pretender


: 22.04.2004 : 1077 : Naumburg
|
| : 15.01.2005, 23:27 : htmlentities oder htmlspecialchars |
|
|
Moin Jörg!
deine idee war richtig, ich habe den code noch etwas ausgebessert, schau mal hier:
| Code: |
<?php
$rdffile = "http://pf.tradedoubler.com/pf/pf?a=1021138&description=GB&categoryId=19&programs=705&maxResults=11&lastResult=0";
$content = implode ("", file ($rdffile));
[b]$content = html_entity_decode($content);[/b]
preg_match_all("|<product(.*)>(.*)</product>|Uism",$content, $items, PREG_PATTERN_ORDER);
for ($i=0;$i<count($items[0]);$i++)
{ preg_match_all(
"|<name>(.*)</name>(.*)<description>(.*)</description>(.*)<imageUrl>(.*)</imageUrl>(.*)<productUrl>(.*)</productUrl>(.*)<price>(.*)</price>(.*)<currency>(.*)</currency>|Uism",$items[0][$i], $regs, PREG_PATTERN_ORDER);
echo
"<img src='".$regs[5][0]."'>
".$regs[1][0]."
[b]".html_entity_decode(utf8_decode($regs[3][0]))."[/b]<br>
Preis: ".$regs[9][0]."
".$regs[11][0]."
<br>
<a href='".$regs[7][0]."' target='_blank'>Klicken Sie hier für alle Details</a><br><br><br><br><br><br><br>\n"; }
?>
|
und jetzt klappt es super fein! ich danke dir echt herzlich dafür!!!
vielen dank
bye
bye Pretender |
|
| Nach oben |
|
 |