2016-06-17 14 views
0

In PHP, was ist die empfohlene Methode für den Abgleich aller URLs in einem Textkörper (dh ein Formular $ _POST textarea im Gegensatz zu einem 'Wort' String) bitte?Methode zum Abgleichen von URLs im Text

Ich bin auf der Suche nach einer Methode, die die große Mehrheit der URLs entspricht, nicht eine super Standards-konforme Catch-All. Beispiele, die Ich mag passen:

Idealerweise werden die Ergebnisse in ein assoziatives Array eingefügt.

Ich verstehe, dass parse_url nicht gut geeignet ist. Und ich habe gehört, dass die Verwendung einer Regex mit Problemen behaftet ist. Aber ich habe auch gehört, dass filter_var erhebliche Probleme hat, nicht zuletzt, dass ein Schema erforderlich ist. Welche Technik verwenden Sie alle?

Danke

+0

Regex für das richtige sein sollte. "Google.com" könnte jedoch zu vielen Fehlalarmen führen. Sie sollten eine Übereinstimmung mit einer Liste gültiger TLDs in Betracht ziehen. –

Antwort

0

In Ihrem Fall würde ich denken, gegen mehrere regexs Prüfung ist der Weg zu gehen.

Hier sind einige Beispiele regexs, die www.google.com entsprechen sollte:

  • /^google[.]com/
  • /^http:\/\/www[.]google[.]com/
0

es wird alle oben Urls in Text extrahiert.

<?php 

$string='http://www.google.com?q=1000 
http://google.com?xlkd=0 
www.google.com?asdfsdf=asdf 
google.com?234324'; 


preg_match_all('#\b(?:http(?:s)?:\/\/)?(?:www\.)??[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $string, $match); 

echo "<pre>"; 
print_r($match); 

Ausgabe lautet:

Array 
(
    [0] => Array 
     (
      [0] => http://www.google.com?q=1000 
      [1] => http://google.com?xlkd=0 
      [2] => www.google.com?asdfsdf=asdf 
      [3] => google.com?234324 
     ) 

    [1] => Array 
     (
      [0] => 0 
      [1] => 0 
      [2] => f 
      [3] => 4 
     ) 

) 

Hoffe, es wird hilfreich

+0

Danke, das ist ein guter Anfang, aber das scheint auch nicht-URL-Text zu entsprechen. – Bogdan

Verwandte Themen