2011-05-19 4 views
1

J'ai ce code regex, qui devrait transformer toutes sortes d'URL différentes en liens dans du texte.trouver toutes les URLs (liens) dans le texte avec php

Le code preg_replace est:

$regex = '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@'; 
$text = preg_replace($regex, '<a href="$1">$1</a>', $item); 

maintenant il fonctionne pour presque toutes les URL que vous pouvez imaginer, mais les problèmes que j'ai sont des virgules et des caractères spéciaux dans les URL ...

Le problème est me faire:

http://www.sdfsdfsdf.sd/si/391,1000,1/more.html

http://sdfsddsdf-sdfsdfds.sr/component/option,com_contact/Itemid,3/lang,si/

drôle ici à ceux stackoverflow deux sont OK :)

Merci, mes meilleures salutations,

Répondre

6

Vous devez éditer votre regex un peu. Cela fera le travail:

$regex = '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.\,]*(\?\S+)?)?)*)@'; 

Comme vous pouvez le voir, il y a une virgule ajoutée ici [-\w/_\.\,] et rien de plus.

Profitez-en!

+0

le problème avec la virgule est que si vous avez alors "http://www.avto.si/, http://www.avtooglasnik.com/, http://www.avtooglasi.com/", ces trois seraient apparié avec la virgule, qu'est-ce qui est faux ofcourse :) une idée? – Luka

+0

@Luka: non, seul le dernier serait associé à la virgule à l'intérieur, les autres ne seraient appariés que comme des domaines avec la virgule non prise en compte. La virgule doit être après une barre oblique ('/') pour correspondre à une URL basée sur l'expression régulière au-dessus de –

+0

mais vous n'avez jamais d'URL qui commence par une virgule, donc cela devrait être invalide, pouvez-vous faire comme ça? merci pour réponse de toute façon, mieux :) – Luka

2

Essayez d'utiliser la fonction suivante:

function replaceURLWithHTMLLinks(text) { 
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 
    return text.replace(exp,"<a href='$1'>$1</a>"); 
} 

Je l'ai trouvé ici: How to replace plain URLs with links?

+0

Cela ne correspond pas à toutes les URL possibles, car vous le limitez à quatre schémas (http, https, ftp et fichier). – Hyperboreus

+0

oui, cela ne correspond pas à beaucoup d'URL, comme sdkfskd.cs ou www.google.cz etc, etc, ... Merci quand même. – Luka

-1

Vous pouvez utiliser cette bibliothèque https://github.com/mxkh/url-finder pour rechercher des URL simples dans une page HTML ou dans un texte. Iinstall avec le compositeur composer require mxkh/url-finder

Aussi cette lib a un support pour trouver des liens vidéo des services visuels populaires comme Youtube, Vimeo.

J'espère que cela sera utile à quelqu'un.

Questions connexes