| 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! Post your PHP questions here! |
 |

23-10-2002, 20:02
|
|
andik2000
Registrierter Benutzer
|
|
Registriert seit: Jan 2002
Beiträge: 791
|
|
Links erkennen und in Variable holen
Hallo mal wieder,
diesmal mit einem etwas kniffeligerem Problem (für mich zu mindest).
Ich ziehe den Content für eine Website aus einer DB, diese beinhaltet auch links in normaler Link-Form (<a href="http://www.domain.de" target="_blank">Hier klicken...</a>).
Nun ist es so, dass diese Links auch geändert werden müssen und zwar über ein Admin-Tool. (Der User hat null Ahnung von HTML!!!)
Ich möchte also in meinem Admin den Content in eine Variable holen, diese soll dann durchforstet werden und mir alle Links, die auf der Seite vorkommen in ein Array holen. Das kann ich dann später weiterverarbeiten.
Mir geht es hauptsächlich darum, wie nun mein Script einen Link-Tag erkennt, und den ganzen Inhalt in eine Variable holt. Es muss also alles, was zwischen "<a" und "/a>"steht erkennen.
Wichtig ist auch, dass das nicht nur einmal gemacht wird, da im Content mehrere Links vorhanden sind.
Hat da jemand vielleicht einen Lösungsvorschlag für mich oder ein kleines Script?
Wäre super!!!
Bitte aber nicht mit anderen Möglichkeiten kommen, das Ganze MUSS nach dieser Vorgehensweise funktionieren. Habe ich auch schon auszureden versucht, aber Chef will das so!
Thanx, Andi
|

24-10-2002, 10:10
|
TBT
 Moderator
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.776
|
|
versuch doch nen regulären Ausdruck
in der Form
preg_match_all("#<a.*>(.*)</a>#isU",$inputtext,$matches);
$matches ist ein Array of Array, dh.
die Antworten findest du in
$matches[1][0]
$matches[1][1]
$matches[1][2]
$matches[1][3]
...
mit count($matches[1]) weißte auch gleich wieviel Links er gefunden hat.
PS: keine 100% Garantie für die regExp, ist ungetestet
|

24-10-2002, 10:40
|
|
Coragon Rivito
Master
|
|
Registriert seit: Oct 2002
Ort: Mils/AT
Beiträge: 910
|
|
PHP-Code:
preg_match_all("#<a (?:.*)href=\"?(.*)\"?(?:.*)>(.*)</a>#isU",$inputtext,$matches);
erweitert .. da linktext und link nicht dasselbe sein müssen
$matches[1][$x] = url
$matches[2][$x] = linktext
mfg
|

24-10-2002, 10:42
|
|
andik2000
Registrierter Benutzer
|
|
Registriert seit: Jan 2002
Beiträge: 791
|
|
Danke euch, werds gleich mal testen!
Zu mindest habe ich jetzt schon mal einen Ansatz.
Dank & Gruß, Andi
|

24-10-2002, 12:57
|
|
andik2000
Registrierter Benutzer
|
|
Registriert seit: Jan 2002
Beiträge: 791
|
|
Jetzt habe ich noch mal eine Frage:
Wofür stehen die # in dem regulären Ausdruck und was bedeutet das #isU?
Ich hate diese entfernt, bekomme dann aber eine Fehlermeldung, dass er den Modifier nicht erkennt. In meinem Handbuch finde ich aber nichts über diese Modifier, wo kann ich mehr darüber erfahren?
Grüße, Andi
|

24-10-2002, 13:30
|
|
Coragon Rivito
Master
|
|
Registriert seit: Oct 2002
Ort: Mils/AT
Beiträge: 910
|
|
# ist einfach ein begrenzer für die regexp ..
du könntest auch / nehmen ..
wenn du innerhalb dann / hast musst die halt escapen, darum in diesem fall #
isU sind modifikatoren, eh schon richtig erkannt ..
i = bah mir liegts auf der zunge *g* egal, einfach ob groß oder kleinschreibung ist egal ..
s = heisst dass er bei . auch zeilenumbrüche findet ..
U = keine ahnung  hab ich auch nur von tbt übernommen *hehe*
http://www.php.net/manual/de/pcre.pattern.modifiers.php
|

24-10-2002, 13:47
|
|
andik2000
Registrierter Benutzer
|
|
Registriert seit: Jan 2002
Beiträge: 791
|
|
Thanx!
Hab das jetzt mal getestet, aber irgendwie willer noch nicht so recht.
Bei $matches[0][0] zeigt er mir der kompletten erkannten Teilstring an,
bei $matches[0][2] zeigt er das mit der URL verknüpfte Wort, aber
bei $matches[0][1] zeigt mir nichts an, da müsste doch dann die URL stehen?!?
Leider bin ich mit den regexp noch nicht so fitt um selber herauszufinden was da schief läuft.
Vielleicht kann mir da noch mal jemand auf die Sprünge helfen.
preg_match_all("#<a (?:.*)href=\"?(.*)\"?(?:.*)>(.*)</a>#isU",$inputtext,$matches);
So siehts derzeit aus.
Grüße, Andi
|

24-10-2002, 14:39
|
|
Coragon Rivito
Master
|
|
Registriert seit: Oct 2002
Ort: Mils/AT
Beiträge: 910
|
|
$matches[1][$x] = url
$matches[2][$x] = linktext
$matches[0] braucht dich nicht zu interessieren
$matches[1][1] = url 1
$matches[2][1] = linktext 1
$matches[1][2] = url 2
$matches[2][2] = linktext 2
$matches[1][3] = url 3
$matches[2][3] = linktext 3
$matches[1][4] = url 4
$matches[2][4] = linktext 4
usw ..
|

24-10-2002, 15:38
|
|
andik2000
Registrierter Benutzer
|
|
Registriert seit: Jan 2002
Beiträge: 791
|
|
Sorry, habe mich hier verschrieben, natürlich habe ich es so gemacht, wie Du es gepostet hast, trotzdem bleibt die [1] leer.
<? print "0:".htmlspecialchars($matches[0][0]) ?><br>
<? print "1:".htmlspecialchars($matches[1][0]) ?><br>
<? print "2:".htmlspecialchars($matches[2][0]) ?><br>
<? print "0:".htmlspecialchars($matches[0][1]) ?><br>
<? print "1:".htmlspecialchars($matches[1][1]) ?><br>
<? print "2:".htmlspecialchars($matches[2][1]) ?><br>
Das Ergebnis:
0:<a href="http://www.test.com" target="_self">Mehr...</a>
1:
2:Mehr...
0:<a href="http://www.test.de">klick hier...</a>
1:
2:klick hier...
We erkennt einfach die URL nicht, aber er nimmt den ganzen Link?!?
Leigt es doch nahe, das was am regexp nicht stimmt
Gruß, Andi
|

24-10-2002, 16:07
|
|
Coragon Rivito
Master
|
|
Registriert seit: Oct 2002
Ort: Mils/AT
Beiträge: 910
|
|
PHP-Code:
$inputtext = "<a href=\"http:// [..] </a> ";
preg_match_all("#<a (?:.*)href=\"(.*)\"(?:.*)>(.*)</a>#isU",$inputtext,$matches);
print_r($matches);
Code:
Array
(
[0] => Array
(
[0] => <a href="http://www.test.com" target="_self">Mehr...</a>
[1] => <a href="http://www.test.com" target="_self">Mehr...</a>
[2] => <a href="http://www.test.com" target="_self">Mehr...</a>
[3] => <a href="http://www.test.com" target="_self">Mehr...</a>
[4] => <a href="http://www.test.com" target="_self">Mehr...</a>
[5] => <a href="http://www.test.com" target="_self">Mehr...</a>
)
[1] => Array
(
[0] => http://www.test.com
[1] => http://www.test.com
[2] => http://www.test.com
[3] => http://www.test.com
[4] => http://www.test.com
[5] => http://www.test.com
)
[2] => Array
(
[0] => Mehr...
[1] => Mehr...
[2] => Mehr...
[3] => Mehr...
[4] => Mehr...
[5] => Mehr...
)
)
sorry, ich wollte vorhin die " beim href-attribut optional machen .. geht aber ned *g*
also so ..
|

24-10-2002, 16:26
|
|
andik2000
Registrierter Benutzer
|
|
Registriert seit: Jan 2002
Beiträge: 791
|
|
Ja super, jetzt läufts!
Was so ein kleines Fragezeichen alles anrichten kann
Ich glaube ich werde mich nun mal in die hohe Kunst der regulären Ausdrücke hineinarbeiten. Bisher konnte ich mich noch vor drücken, aber nun wirds wohl langsam Zeit dieses zu verstehen.
Danke für die Hilfe!
Gruß, Andi
|

24-10-2002, 16:30
|
|
Coragon Rivito
Master
|
|
Registriert seit: Oct 2002
Ort: Mils/AT
Beiträge: 910
|
|
ich danke auch .. schließlich bekomm ichs auch nur intus wenn ichs gebrauche 8)
|
|
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
|