Auf URLs überprüfen |
Agi
TEAM - PHP Freak
Dabei seit: 22.11.04
Beiträge: 2.628
Fähigkeiten: WBB3 Profi Forenversion: 3.1
|
|
Nabend.
Ich hab ein Problem und komm bei dem seit Stunden nicht weiter ...
Ich habe einen Text (abgeschickt via Formular) und möchte nun mittels PHP prüfen, ob es in diesem Text URLs gibt.
Falls URLs vorhanden sind, sollten die in <a href="$url">$url</a> umgewandelt werden.
Kann mir da jemand nen Tipp geben, wie man das am besten lösen könnte?
__________________
|
|
08.03.09 03:10 |
Finden
Als Freund hinzufügen
|
|
DrPCox
Herr des Chaos
Dabei seit: 04.03.07
Beiträge: 414
Fähigkeiten: WBB3 Anfänger; WBB2 Fortgeschritten; WBB Lite 1 Fortgeschritten Herkunft: Essen, NRW Forenversion: 3.0; 2.3
|
|
ich hab mal etwas gegrübelt und bin auf die schnelle auf das hier gekommen:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
|
<?php
$text = $_POST['url'];
$http = 'http';
$de = 'de';
$startpos = strpos($url, $http);
$start = substr($url, $startpos, 9999);
$endposde = strpos($start, $de) + 2;
$endde = substr($start, 0, $endposde);
echo '<a href="'.$endde.'">'.$endde.'</a>';
?> |
|
$text = holt per post die eingabe vom textfeld
$http und $de sind nur platzhalter
$startpos = ermittelt per strpos an welchem punkt der eingabe http beginnt.
$start = gibt die eingabe ab $startpos aus (für maxial 9999 zeichen..sollte reichen^^)
$endposde = ermittelt per strpos an welchem punkt von $start "de" auftaucht. und erhöht den wert um zwei um das "de" miteinzuschließen
$endde = kürzt $start bis zur in $endposde ermittelten stelle (die url ist ausgelesen)
echo ist klar.
---------------------------
ich habe das jetzt mal so kurzerhand zusammen gecodet und es funktioniert auch. allerdings kann man bisher nur nach de-domains suchen, aber mit nem array lässt sich auch das ja lösen^^
EDIT
mir ist gerade aufgefallen, dass das script nur die erste url aus der eingabe wiedergibt. wenn mehrere enthalten sind, wird der rest ignoriert..naja..vielleicht dient es immerhin als denkhilfe^^
__________________
Signaturen werden überbewertet
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von DrPCox: 08.03.09 11:11.
|
|
08.03.09 10:54 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
24Bytes
Der Coolste
Dabei seit: 19.07.06
Beiträge: 2.909
Fähigkeiten: WBB3 Anfänger; WBB2 Profi; WBB Lite 2 Anfänger; WBB Lite 1 Fortgeschritten Forenversion: 3.0; 2.3
|
|
Die Lösung ist zu geil
Die "richtige" / "bessere" Lösung lautet: REGEX (natürlich nur meine Ansicht)
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
|
$message = "Hallo,
das ist eine Test Nachricht https://test.de mit mehreren urls http://test.de ob mit
http oder https und auch egal ob
mit http://www.lala.de oder https://blub.lala.com ;) verstehen?! :D";
$message = trim(preg_replace("#(http|https)://(.*) #siU", '<a href="${1}://${2}" target="_blank">${2}</a> ', $message . " "));
/**
* ich haeng zuerst ein leer zeichen dran, und machs
* danach mit trim wieder weg, geht bestimmt auch besser,
* aber ich habs auf die schnelle so gemacht, damit auch eine url
* erkannt wird, die am ende des textes steht (weil laut diesem regex,
* eine url von einem leerzeichen gefolgt sein muss)
*/
echo $message; |
|
__________________ Online Passwort Generator
|
|
08.03.09 11:42 |
E-Mail
Finden
Als Freund hinzufügen
|
|
DrPCox
Herr des Chaos
Dabei seit: 04.03.07
Beiträge: 414
Fähigkeiten: WBB3 Anfänger; WBB2 Fortgeschritten; WBB Lite 1 Fortgeschritten Herkunft: Essen, NRW Forenversion: 3.0; 2.3
|
|
aber darf ich mal fragen, warum du meine lösung auslachst? ja, ich bin noch nicht soo vertraut mit php und mysql, aber ich versuche zu helfen. dass du es besser kannst, ist ja schön und finde ich bewundernswert, aber respekt ist auch ne feine sache.
|
|
08.03.09 12:11 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
24Bytes
Der Coolste
Dabei seit: 19.07.06
Beiträge: 2.909
Fähigkeiten: WBB3 Anfänger; WBB2 Profi; WBB Lite 2 Anfänger; WBB Lite 1 Fortgeschritten Forenversion: 3.0; 2.3
|
|
hm das war kein auslachen ... ich mache auch oft dinge die um einiges komplizierter sind, als sie eigentlich sein müssen. man kann ja auch nie alles wissen. ich fand das halt nur witzig, wie du es lösen würdest ... (im übrigen, lache ich auch über mein eigenen code auch, wenn erst mal nen bissl. zeit vergangen ist
) also, net bös nehmen
__________________ Online Passwort Generator
|
|
08.03.09 18:44 |
E-Mail
Finden
Als Freund hinzufügen
|
|
DrPCox
Herr des Chaos
Dabei seit: 04.03.07
Beiträge: 414
Fähigkeiten: WBB3 Anfänger; WBB2 Fortgeschritten; WBB Lite 1 Fortgeschritten Herkunft: Essen, NRW Forenversion: 3.0; 2.3
|
|
ja..sorry auch wenn meiner reaktion. nur irgendwie hatte ich mich etwas in dem code verrant und war froh, dass er überhaupt funktioniert hat
|
|
08.03.09 18:55 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
Agi
TEAM - PHP Freak
Dabei seit: 22.11.04
Beiträge: 2.628
Fähigkeiten: WBB3 Profi Forenversion: 3.1
Themenstarter
|
|
Hi danke euch beiden.
Aber die Lösung von 24Bytes funktioniert doch wesentlich besser und reibungslos, drum hab ich mich für diese entschieden.
Aber noch ne zusätzliche Frage: Wie müsste der Befehl aussehen, wenn er auf <a href="http://www.url.de">www.url.de</a> umwandeln soll?
Hab schon selbst ein wenig versucht, aber da wandelt er dann alles ab www. bis zum Textende um:
php: |
1:
|
$message = trim(preg_replace("#(www.)(.*) #siU", '<a href="http://${1}${2}">${1}${2}</a> ', $message . " ")); |
|
__________________
|
|
08.03.09 18:57 |
Finden
Als Freund hinzufügen
|
|
Hawkes
gesperrt 10/01/10
Dabei seit: 31.03.04
Beiträge: 213
|
|
Warum nicht mal bei den Profis spicken. Hab das hier mal aus dem WCF ausgekoppelt (Lizenz LGPL):
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
$test="www.url.de";
$urlPattern = '~(?<!\B|"|\'|=|/|\]|,|\?)
(?: # hostname
(?:ftp|https?)://[^\x0-\x2C\x2E\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+(?:\.[^\x0-\x2C\x2E\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+)*
|
www\.(?:[^\x0-\x2C\x2E\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+\.)+
(?:[a-z]{2,4}(?=\b))
)
(?::\d+)? # port
(?:
/
[^!.,?;"\'<>()\[\]{}\s]*
(?:
[!.,?;(){}]+ [^!.,?;"\'<>()\[\]{}\s]+
)*
)?
~ix';
$message = preg_replace($urlPattern, '<a href="\\0">\\0</a>', $test); |
|
Damit dürftest du so zeimlich alle Fälle abdecken können
|
|
08.03.09 20:20 |
Finden
Als Freund hinzufügen
|
|
Agi
TEAM - PHP Freak
Dabei seit: 22.11.04
Beiträge: 2.628
Fähigkeiten: WBB3 Profi Forenversion: 3.1
Themenstarter
|
|
Das klappt prima, danke dir. ^^
__________________
|
|
08.03.09 21:18 |
Finden
Als Freund hinzufügen
|
|
24Bytes
Der Coolste
Dabei seit: 19.07.06
Beiträge: 2.909
Fähigkeiten: WBB3 Anfänger; WBB2 Profi; WBB Lite 2 Anfänger; WBB Lite 1 Fortgeschritten Forenversion: 3.0; 2.3
|
|
Zitat: |
Original von Admiral_Hawkes
Warum nicht mal bei den Profis spicken. |
Weil auch "Profis" Fehler machen.
Zitat: |
Original von Admiral_Hawkes
Damit dürftest du so zeimlich alle Fälle abdecken können
|
www.testdomain.museum klappt nicht, die haben eine "Begrenzung" drin, das die Domainendung max. 4 Zeichen lang sein darf
php: |
1:
|
(?:[a-z]{2,4}(?=b)) |
|
ersetzen durch
php: |
1:
|
(?:[a-z]{2,6}(?=b)) |
|
__________________ Online Passwort Generator
|
|
08.03.09 22:40 |
E-Mail
Finden
Als Freund hinzufügen
|
|
|