Seite 1 von 1

PHP | Link aus String generieren und kürzen

Verfasst: 31.07.2009, 17:35
von kaisen
ich wende mich mal an das Forum, da ich selbst nicht auf die Lösung komme.
Gebraucht wird ein Codeschnippsel, der folgendes realisiert:

Es gibt einen String der neben zahlreichem text folgendes enthalten kann:

Code: Alles auswählen

http://www.domain.tld/unterverzeichnis/index.html
www.domain.tld/unterverzeichnis/index.html
www.domain.tld/unterverzeichnis/?Parameter=xy&Parameter2=xy
http://www.domain.tld/unterverzeichnis/?Parameter=xy&Parameter2=xy
Nun muss irgendwie mit regulären Ausdrücken der Link in einen klickbaren Link geändert werden, also in sowas:

Code: Alles auswählen

... <a href="URL">Link</a> ...
Wobei der Linkname nur noch aus www.domain.tld bestehen soll und etwaige Unterverteichnisse oder Parameter nur noch im HREF-Teil des Links enthalten sein sollen.

Hat jemand einen Tipp für mich, bzw. einen Link wo für dieses ein Codesnippet zu finden ist?!

Besten Dank!!!

Verfasst:
von

Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Re: PHP | Link aus String generieren und kürzen

Verfasst: 31.07.2009, 19:51
von Mork vom Ork
Dieser Code &#8230;

Code: Alles auswählen

<?php
header&#40;"Content-Type&#58; text/plain"&#41;;

$text = 'http&#58;//www.domain.tld/unterverzeichnis/index.html
www.domain.tld/unterverzeichnis/index.html
www.domain.tld/unterverzeichnis/?Parameter=xy&Parameter2=xy
http&#58;//www.domain.tld/unterverzeichnis/?Parameter=xy&Parameter2=xy';

preg_match_all&#40;'|&#40;?&#58;http&#58;//&#41;?&#40;&#40;www\.&#91;a-z0-9.-&#93;+\.&#91;a-z&#93;+&#41;&#91;/a-z0-9?_.,;&=-&#93;+&#41;|i', $text, $m, PREG_SET_ORDER&#41;;

var_dump&#40;$m&#41;;

?>
ergibt &#8230;

Code: Alles auswählen

array&#40;4&#41; &#123;
  &#91;0&#93;=>
  array&#40;3&#41; &#123;
    &#91;0&#93;=> "http&#58;//www.domain.tld/unterverzeichnis/index.html"
    &#91;1&#93;=> "www.domain.tld/unterverzeichnis/index.html"
    &#91;2&#93;=> "www.domain.tld"
  &#125;
  &#91;1&#93;=>
  array&#40;3&#41; &#123;
    &#91;0&#93;=> "www.domain.tld/unterverzeichnis/index.html"
    &#91;1&#93;=> "www.domain.tld/unterverzeichnis/index.html"
    &#91;2&#93;=> "www.domain.tld"
  &#125;
  &#91;2&#93;=>
  array&#40;3&#41; &#123;
    &#91;0&#93;=> "www.domain.tld/unterverzeichnis/?Parameter=xy&Parameter2=xy"
    &#91;1&#93;=> "www.domain.tld/unterverzeichnis/?Parameter=xy&Parameter2=xy"
    &#91;2&#93;=> "www.domain.tld"
  &#125;
  &#91;3&#93;=>
  array&#40;3&#41; &#123;
    &#91;0&#93;=> "http&#58;//www.domain.tld/unterverzeichnis/?Parameter=xy&Parameter2=xy"
    &#91;1&#93;=> "www.domain.tld/unterverzeichnis/?Parameter=xy&Parameter2=xy"
    &#91;2&#93;=> "www.domain.tld"
  &#125;
&#125;
Das müsstest du entsprechend mit preg_replace_callback() und eingebettetem htmlspecialchars() umsetzen. Benutzt du nur preg_replace(), bekommst du falschen Code, sobald ein & im Text auftaucht, und eine Sicherheitslücke, falls du < und > zulässt (dann kann man dir HTML-Code mitsamt Javascript & Co. unterjubeln).
Erfasst keine Domains, die ohne www. beginnen, und ist möglicherweise auch auf anderen Augen blind, aber als Einstieg sollte es reichen. Bessere Muster zur URL-Erkennung sollten im Netz zu finden sein, wichtig ist nur die Klammersetzung, um die richtigen Daten rauszufischen. (n.b.: Das ?: bei (?:http://) bedeutet, dass der Inhalt dieser runden Klammer nicht kopiert wird - das http:// brauchen wir ja nicht.)

Verfasst: 02.08.2009, 18:48
von kaisen
Danke schon einmal für deine Hilfe.
Dein Code findet ja nun die Links, aber wie kriege ich jetzt die Funktionalität, dass in dem Original-String die URLs durch klickbare Links (mit <a href="originalURL">www.domainname.tld</a>) ersetzt werden?

Edit: So selbst ist der Mann! Hatte mit callbacks und create_function nur noch nicht gearbeitet. Hier der Code für alle die es evtl. gebrauchen können...

Code: Alles auswählen

$text_neu = preg_replace_callback&#40;
    '|&#40;?&#58;http&#58;//&#41;?&#40;&#40;www\.&#91;a-z0-9.-&#93;+\.&#91;a-z&#93;+&#41;&#91;/a-z0-9?_.,;&=-&#93;+&#41;|i',
    create_function&#40;
      '$treffer',
	  'return "<a href=\"http&#58;//".$treffer&#91;1&#93;."\">".$treffer&#91;2&#93;."</a>";'
    &#41;,
    htmlspecialchars&#40;$text&#41;
  &#41;;  
	  
echo $text_neu;