YourWBB


yourWBB » yourWBB Misc * » Das Proggen » MySQL und PHP » Auf URLs überprüfen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag 3.470 Views | | Thema zu Favoriten hinzufügen

Neues Thema erstellen Antwort erstellen

Zum Ende der Seite springen Auf URLs überprüfen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Agi Agi ist männlich
TEAM - PHP Freak

images/avatars/avatar-5240.gif

Dabei seit: 22.11.04
Beiträge: 2.628
Fähigkeiten: WBB3 Profi
Forenversion: 3.1

 Auf URLs überprüfen Antworten Zitieren Editieren Melden       UP

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 Agi ist offline Finden Als Freund hinzufügen
DrPCox DrPCox ist männlich
Herr des Chaos


images/avatars/avatar-5505.gif

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

Antworten Zitieren Editieren Melden       UP

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$startpos9999);

$endposde strpos($start$de) + 2;
$endde substr($start0$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 DrPCox ist offline E-Mail WWW Finden Als Freund hinzufügen
24Bytes 24Bytes ist männlich
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

Antworten Zitieren Editieren Melden       UP

geschockt Die Lösung ist zu geil fröhlich

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 24Bytes ist offline E-Mail Finden Als Freund hinzufügen
DrPCox DrPCox ist männlich
Herr des Chaos


images/avatars/avatar-5505.gif

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

Antworten Zitieren Editieren Melden       UP

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 DrPCox ist offline E-Mail WWW Finden Als Freund hinzufügen
24Bytes 24Bytes ist männlich
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

Antworten Zitieren Editieren Melden       UP

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 Augenzwinkern ) also, net bös nehmen Augenzwinkern

__________________
Online Passwort Generator
08.03.09 18:44 24Bytes ist offline E-Mail Finden Als Freund hinzufügen
DrPCox DrPCox ist männlich
Herr des Chaos


images/avatars/avatar-5505.gif

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

Antworten Zitieren Editieren Melden       UP

ja..sorry auch wenn meiner reaktion. nur irgendwie hatte ich mich etwas in dem code verrant und war froh, dass er überhaupt funktioniert hat Augenzwinkern
08.03.09 18:55 DrPCox ist offline E-Mail WWW Finden Als Freund hinzufügen
Agi Agi ist männlich
TEAM - PHP Freak

images/avatars/avatar-5240.gif

Dabei seit: 22.11.04
Beiträge: 2.628
Fähigkeiten: WBB3 Profi
Forenversion: 3.1

Themenstarter Thema begonnen von Agi
Antworten Zitieren Editieren Melden       UP

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
code:
1:
www.url.de
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 Agi ist offline Finden Als Freund hinzufügen
Hawkes
gesperrt 10/01/10


Dabei seit: 31.03.04
Beiträge: 213

Antworten Zitieren Editieren Melden       UP

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 Augenzwinkern
08.03.09 20:20 Hawkes ist offline Finden Als Freund hinzufügen
Agi Agi ist männlich
TEAM - PHP Freak

images/avatars/avatar-5240.gif

Dabei seit: 22.11.04
Beiträge: 2.628
Fähigkeiten: WBB3 Profi
Forenversion: 3.1

Themenstarter Thema begonnen von Agi
Antworten Zitieren Editieren Melden       UP

Das klappt prima, danke dir. ^^

__________________

08.03.09 21:18 Agi ist offline Finden Als Freund hinzufügen
24Bytes 24Bytes ist männlich
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

Antworten Zitieren Editieren Melden       UP

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 Augenzwinkern

www.testdomain.museum klappt nicht, die haben eine "Begrenzung" drin, das die Domainendung max. 4 Zeichen lang sein darf Augenzwinkern

php:
1:
(?:[a-z]{2,4}(?=b))
ersetzen durch
php:
1:
(?:[a-z]{2,6}(?=b))


__________________
Online Passwort Generator
08.03.09 22:40 24Bytes ist offline E-Mail Finden Als Freund hinzufügen
Hawkes
gesperrt 10/01/10


Dabei seit: 31.03.04
Beiträge: 213

Antworten Zitieren Editieren Melden       UP

.museum kannte ich gar nicht großes Grinsen

Werds mal im WSF melden.
09.03.09 08:02 Hawkes ist offline Finden Als Freund hinzufügen
Baumstruktur | Brettstruktur
Gehe zu:

Neues Thema erstellen Antwort erstellen

yourWBB » yourWBB Misc * » Das Proggen » MySQL und PHP » Auf URLs überprüfen