PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

31-03-2013, 14:13
|
newbie1955
Registrierter Benutzer
|
|
Registriert seit: Dec 2012
Beiträge: 241
|
|
String mit exaktem Begriff ausschließen
Hallo, ich möchte aus einen String ausschließen, der AUSSCHLIESSLICH den aus dem Begriff "Region" besteht. Sollte der String aber "Region" als einen Begriff von mehreren enthalten (z. B."....in der Region"), dann soll der String nicht ausgeschlossen werden. Dazu habe ich bisher nix gefunden. Ich hatte es mit strstr versucht, dann werden aber alle strings ausgeschlossen, in denen "Region" vorkommt.
Gruß und Dank
newbie1955
|

31-03-2013, 14:50
|
newbie1955
Registrierter Benutzer
|
|
Registriert seit: Dec 2012
Beiträge: 241
|
|
2. Versuch
ich habe versucht, das Problem über die Stringlänge zu lösen. Merkwürdigerweise passsiert folgendes. Ich lese auf einer Seite die h2-tags ein
PHP-Code:
$data = file_get_contents('http://www.seite.de'); $doc = new DOMDocument(); $doc->loadHTML($data); $result = $doc->getElementsByTagName("h2"); foreach ($result as $node) { $laenge = strlen ($node->nodeValue);
Auf der Seite steht folgendes:
HTML-Code:
<h2><a href="/region">Region</a></h2>
Wenn ich jetzt mit
PHP-Code:
echo $laenge; echo $node->nodeValue;
das Ergebnis ausgebe kommt die Länge 19 und der NodeValue "Region".
Weiß jemand einen Rat?
Gruß
newbie1955
|

31-03-2013, 15:57
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Zitat:
Zitat von newbie1955
ich habe versucht, das Problem über die Stringlänge zu lösen.
|
Welches Problem eigentlich? Wenn du wirklich einen exakten Stringvergleich willst – dann tut’s doch ein simples
PHP-Code:
'Foo' === 'Foo'
absolut ausreichend ...?
Zitat:
[...] kommt die Länge 19 und der NodeValue "Region".
|
Hast du überprüft, ob da nicht vielleicht noch Whitespace im Value mit drin steckt?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

31-03-2013, 19:46
|
newbie1955
Registrierter Benutzer
|
|
Registriert seit: Dec 2012
Beiträge: 241
|
|
Whitespaces
Danke für die Antwort. Ja, manchmal denkt mal vielleicht zu kompliziert, aber dennoch, es funktioniert auch mit direktem Vergleich nicht, ich habe ja oben abgedruckt, das der $node->nodeValue zwischen > und < nur aus dem Wort "Region" besteht (So steht es jedenfalls im Quellcode) und wenn ich echo $node->nodeValue ausgebe, kommt ja auch nur das eine Wort, (würde er denn, wenn es whitespaces gäbe, die automatisch bei der echo - Ausgabe trimmen?Nee, oder) Es muss aber noch mehr da sein, (nicht nur wegen der Längenausgabe) denn bei der Abfrage
PHP-Code:
if ($node->nodeValue !== "Region")
kommt "Region" trotzdem....Wie kann ich denn herausfinden, was da noch drinsteckt, mit var_dump doch wohl nicht....denn das hatte ich schon versucht.
???
Gruß
newbie1955
|

31-03-2013, 19:52
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Gebe den Wert mal mit urlencode() behandelt aus.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

31-03-2013, 21:23
|
newbie1955
Registrierter Benutzer
|
|
Registriert seit: Dec 2012
Beiträge: 241
|
|
urlencode
ausgegeben wird mit urlencode:
PHP-Code:
%0D%0A%09%09%09%09%09%09%09%09%09%09%09Region
Aber bei echo ohne urlencode bildet er die Zeichen ja nicht ab. "Trimmt" er da automatisch?
Selber trimmen nützt jedenfalls nix, da kommt dasselbe heraus (sind ja auch keine Leerzeichen). Ich könnte höchstens die Zahl der Wörter zählen und wenn es nur ein Wort ist, dann soll er es ausschließen. Oder was könnte ich noch machen? Hab ich so noch nicht erlebt.
Gruß und Dank
newbie1955
Geändert von newbie1955 (31-03-2013 um 21:28 Uhr)
|

01-04-2013, 05:51
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Zitat:
Zitat von newbie1955
ausgegeben wird mit urlencode:
PHP-Code:
%0D%0A%09%09%09%09%09%09%09%09%09%09%09Region
|
Wie ich vermutet habe, Whitespace also.
Zitat:
Aber bei echo ohne urlencode bildet er die Zeichen ja nicht ab.
|
Multiple Whitespace-Zeichen jeglicher Art werden bei der Darstellung als HTML zu einem einzigen Leerzeichen.
Zitat:
Selber trimmen nützt jedenfalls nix, da kommt dasselbe heraus (sind ja auch keine Leerzeichen).
|
Doch, nützt – trim entfernt per default die Whitespace-Zeichen, die in deinem String enthalten sind.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

01-04-2013, 12:50
|
newbie1955
Registrierter Benutzer
|
|
Registriert seit: Dec 2012
Beiträge: 241
|
|
trimmen
..aber ich habe es probiert, habe $node->nodeValue mit urlencode ausgegeben, dann getrimmt, dann nochmal ausgegeben und es kam beide Male dasselbe Ergebnis...
Habe es jetzt mit dem Wörterzählen gemacht und alle $node->nodeValues ausgeschlossen, die nur aus einem Wort bestehen, ist aber nur eine Notlösung, denn theoretisch könnte ein anderer $node->nodeValue auch nur EIN Wort enthalten und durchaus erwünscht sein.
|

01-04-2013, 13:59
|
Melewo
Registrierter Benutzer
|
|
Registriert seit: Jan 2013
Beiträge: 365
|
|
Und $node->nodeValue hattest Du auch schon ohne urlencode getrimmt oder nur gedacht, dass es nichts bringt? Getrimmt wird wohl String vor Weiterverarbeitung und nicht für Ausgabe im Browser, wo es dann auf ein Leerzeichen zusammenschrumpft.
Habe es mal kurz getestet.
In /test.html:
HTML-Code:
<h2><a href="www.example.net/region.html"> Region</a></h2>
In datei.php:
PHP-Code:
<?php
$data = file_get_contents("http://localhost/test.html"); $doc = new DOMDocument(); $doc->loadHTML($data); $result = $doc->getElementsByTagName("h2");
foreach ($result as $node) {
$laenge = strlen($node->nodeValue); echo $laenge; // Ausgabe: 19
$laenge = strlen(trim($node->nodeValue)); echo $laenge; // Ausgabe: 6 } ?>
%0D%0A am Anfang lässt darauf schließen, dass in der HTML auch noch ein Zeilenumbruch enthalten ist. /test.html geändert, um dieses Ergebnis zu erhalten:
HTML-Code:
<h2><a href="www.example.net/region.html">
Region</a></h2>
Mit strlen($node->nodeValue) Ergebnis: 32
Mit strlen(trim($node->nodeValue)) Ergebnis: 6
Geändert von Melewo (01-04-2013 um 14:59 Uhr)
|

02-04-2013, 01:06
|
newbie1955
Registrierter Benutzer
|
|
Registriert seit: Dec 2012
Beiträge: 241
|
|
Super
Keine Ahnung, warum bei mir beide Male dasselbe herauskam, jetzt klappt es, danke!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|