Ich will   ersetzen
glupto
- html
Hallo, ich parse einen feed und gebe die description aus, werde aber diverse " " die am Ende herumstehen, nicht los. Auch nach reichlichem gegoogle (z. B. bei stackoverflow wurde das schon mal debattiert) und verschiedenen Lösungsversuchen z. B. mit str-replace, ich kriege die   nicht durch einfachen Leerraum oder "gar nichts" ersetzt. Hat jemand eine Idee?
Liebe(r) glupto,
was genau hast Du versucht (code), zu welchem Ergebnis hat das geführt, und was hat Dir daran nicht eingeleuchtet?
Liebe Grüße,
Felix Riesterer.
Liebe(r) glupto,
was genau hast Du versucht (code), zu welchem Ergebnis hat das geführt, und was hat Dir daran nicht eingeleuchtet?
Liebe Grüße,
Felix Riesterer.
Hier der QUelltext:
<item>
<link>http://sz.de/1.1697295</link>
<title><![CDATA[Protest in Istanbul: Türkische Polizei räumt Gezi-Park]]></title>
<description><![CDATA[
<div>
<img src="http://polpix.sueddeutsche.com/polopoly_fs/1.1697383.1371322453!/httpImage/image.jpg_gen/derivatives/135x135/image.jpg" alt="-, OZAN KOSE / AFP" title="-, OZAN KOSE / AFP" width="135" height="135" style="float: left;margin-right: 10px;" border="0" />
<p style="padding: 0px;">
Tränengas und Wasserwerfer: Die türkische Polizei hat den Gezi-Park in Istanbul gestürmt und vollständig geräumt. Kurz nachdem Ministerpräsident Erdogan den Demonstranten ein Ultimatum gesetzt hatte, begann die Polizei einen Großeinsatz.
</p>
</div>]]></description>
Die description hole ich mit PHP so ab und gebe sie mit HTML so aus:
if (($nachricht->title) && ($title!="") && ($title != NULL)){
if (($nachricht->description) != false) {
$desc = ($nachricht->description);
$desc = trim($desc);
str_replace(" ", "", $desc);
preg_replace("/(\s)|(\ \;)/",'',$desc);
echo "<li><a href=\"".htmlspecialchars(filtereLinks($link), ENT_QUOTES)."\" target=\"_blank\"title =\"".htmlspecialchars(filtereHTML($desc), ENT_QUOTES)."\">".
htmlspecialchars(filtereHTML($nachricht->title), ENT_QUOTES)."</a></li>\n";
}
Ausgegeben wird die description und am Ende sieht der Text so aus:
Tränengas und Wasserwerfer: Die türkische Polizei hat den Gezi-Park in Istanbul gestürmt und vollständig geräumt. Kurz nachdem Ministerpräsident Erdogan den Demonstranten ein Ultimatum gesetzt hatte, begann die Polizei einen Großeinsatz.    
Ich hatte es auch mit preg_replace("/(\s)|(\ \;)/",'',$desc);
versucht. Das Ergebnis. Die   bleiben, wo sie sind. Habe es auch noch mit anderen Sachen versucht, das müsste ich aber in meiner Erinnerung graben, herauskam bestenfalls, dass aus   unlesbare Zeichen wurden.
Gruß
glupto
Hi,
str_replace(" ", "", $desc);
preg_replace("/(\s)|( )/",'',$desc);
Es wäre hilfreich, das Ergebnis der Ersetzung nicht einfach wieder wegzuschmeißen ...
cu,
Andreas
Hi,
str_replace(" ", "", $desc);
preg_replace("/(\s)|( )/",'',$desc);Es wäre hilfreich, das Ergebnis der Ersetzung nicht einfach wieder wegzuschmeißen ...
cu,
Andreas
Entschuldigt, aber das sind zwei vergebliche Versuche, die im Code versehentlich stehen geblieben sind (weil sie ja eh wirkungslos waren). Ich habe beides natürlich getrennt versucht - ohne Erfolg.
Hallo
Hi,
str_replace(" ", "", $desc);
preg_replace("/(\s)|( )/",'',$desc);Es wäre hilfreich, das Ergebnis der Ersetzung nicht einfach wieder wegzuschmeißen ...
cu,
AndreasEntschuldigt, aber das sind zwei vergebliche Versuche, die im Code versehentlich stehen geblieben sind (weil sie ja eh wirkungslos waren). Ich habe beides natürlich getrennt versucht - ohne Erfolg.
Es geht MudGuard nicht darum, dass die zwei Versuche getrennt zu erfolgen haben, sondern darum, dass du das Ergebnis der Funktion(en) nicht an eine Variable zurückgibst. Zudem würdest du bei deinem Code, wenn er denn funktionierte, (unter anderem) einen Haufen Semikola zurückbekommen, da du diese – aus " " stammenden – nicht mit ersetzt.
Schau dir die Beispiele zu str_replace und preg_replace in der Doku an. Für deinen Zweck sollte str_replace schneller ausgeführt werden und daher besser geeignet sein.
Tschö, Auge
Es geht MudGuard nicht darum, dass die zwei Versuche getrennt zu erfolgen haben, sondern darum, dass du das Ergebnis der Funktion(en) nicht an eine Variable zurückgibst. Zudem würdest du bei deinem Code, wenn er denn funktionierte, (unter anderem) einen Haufen Semikola zurückbekommen, da du diese – aus " " stammenden – nicht mit ersetzt.
Schau dir die Beispiele zu str_replace und preg_replace in der Doku an. Für deinen Zweck sollte str_replace schneller ausgeführt werden und daher besser geeignet sein.
Tschö, Auge
Tja, wer gucken kann, ist klar im Vorteil, aber darum heißt Du ja auch "Auge". Irgendwie hatte ich im Hinterkopf falsch gespeichert, dass die Korrektur gleich im eingelesenen String "zurückgeschrieben" wird. Weiß nicht, wie ich darauf komme. Danke!
eingelesenen String "zurückgeschrieben" wird. Weiß nicht, wie ich darauf komme.
Vorher in Perl programmiert?
Moin!
Ok, ich sehe ein RSS-Fragment.
In diesem Fragment sind keine notiert.
Hier der QUelltext:
<item>
<link>http://sz.de/1.1697295</link>
<title><![CDATA[Protest in Istanbul: Türkische Polizei räumt Gezi-Park]]></title>
<description><![CDATA[
<div>
<img src="http://polpix.sueddeutsche.com/polopoly_fs/1.1697383.1371322453!/httpImage/image.jpg_gen/derivatives/135x135/image.jpg" alt="-, OZAN KOSE / AFP" title="-, OZAN KOSE / AFP" width="135" height="135" style="float: left;margin-right: 10px;" border="0" />
<p style="padding: 0px;">
Tränengas und Wasserwerfer: Die türkische Polizei hat den Gezi-Park in Istanbul gestürmt und vollständig geräumt. Kurz nachdem Ministerpräsident Erdogan den Demonstranten ein Ultimatum gesetzt hatte, begann die Polizei einen Großeinsatz.
</p>
</div>]]></description>
Wenn ich davon ausgehe, dass die "normalen" XML-Regeln für CDATA auch hier korrekt greifen, erhältst du beim PHP-seitigen Zugriff auf die Description also einen String, der genau den Zeichen-Inhalt hat, der innerhalb der CDATA-Klammern steht. Also sind da keine drin.
> ~~~php
> if (($nachricht->title) && ($title!="") && ($title != NULL)) { // fehlerhafter Check!
>
> if (($nachricht->description) != false) { // fragwürdiger Check
>
> $desc = ($nachricht->description); // Der String von oben steht jetzt in $desc
> $desc = trim($desc); // Führend und folgendes Whitespace (Leerzeichen u.a.) werden entfernt
> str_replace(" ", "", $desc); // Es sind immer noch keine im String.
> preg_replace("/(\s)|(\ \;)/",'',$desc); // auch hier nicht.
>
> // Jetzt kommt die Ausgabe. Was passiert mit $desc?
>
> echo "<li><a href=\""
> . htmlspecialchars(filtereLinks($link), ENT_QUOTES)
> . "\" target=\"_blank\"title =\""
> . htmlspecialchars(filtereHTML($desc), ENT_QUOTES)
> . "\">"
> . htmlspecialchars(filtereHTML($nachricht->title), ENT_QUOTES)
> . "</a></li>\n";
> }
> }
>
Man sieht: echo htmlspecialchars(filtereHTML($desc), ENT_QUOTES);
Die Beschreibung geht also zuerst noch in eine uns unbekannte Funktion "filtereHTML", und danach werden Entities aus Sonderzeichen gemacht.
Wenn vorher keine im String waren, aber hinterher, dann ist diese Funktion "filtereHTML" Schuld.
Ach ja:
if (($nachricht->title) && ($title!="") && ($title != NULL)) { // fehlerhafter Check!
In "$nachricht->title" steht der Titel, aber $title ist eine ganz andere, vermutlich nicht initialisierte Variable, die mit der ersten nichts zu tun hat.
if (($nachricht->description) != false) { // fragwürdiger Check
Wenn man wissen will, ob irgendeine Variable "irgendwas gutes" enthält, wäre if ($nachricht->description)
vollkommen ausreichend, so wie auch bei $nachricht->title.
Mir persönlich gefällt das allerdings nicht. Wenn ich "keine Description" habe, sieht das in der Datenstruktur auch irgendwie aus, und ich würde das möglichst explizit prüfen, damit ich es unterscheiden kann von "kaputte Description".
- Sven Rautenberg
હેલો
Hallo, ich parse einen feed und gebe die description aus, werde aber diverse " "
Richtig schreibt man es „
“, und ja, die kriegt man ganz einfach durch einfache Ersetzung weg.
$_text = ' Lorem ipsum Kauderwelsch ';
print str_replace(' ', ' ', $_text);
બાય