Extrait de l'URL de la chaîne
J'essaie de trouver une solution fiable pour extraire une url à partir d'une chaîne de caractères. J'ai un site où les utilisateurs peuvent répondre à des questions et dans la zone source, où ils entrent dans leur source d'information, je leur permettent d'entrer une url. Je veux extraire l'url et faire un lien hypertexte. Similaire à la façon dont les Réponses de Yahoo-t-il.
Personne ne sait d'une solution fiable qui peut faire cela?
Toutes les solutions que j'ai trouvé du travail pour certaines URL, mais pas pour d'autres.
Grâce
OriginalL'auteur Jack Harvin | 2010-12-08
Vous devez vous connecter pour publier un commentaire.
John Gruber a passé une bonne quantité de temps de perfectionnement de la "une regex pour les gouverner tous" pour la détection de liaison. À l'aide de
preg_replace()
comme mentionné dans les autres réponses, en utilisant les regex doit être le plus précis, si ce n'est la plus précise, la méthode pour la détection d'un lien:Si vous ne voulait correspondre à HTTP/HTTPS:
Pour quelqu'un qui veut que tous les sous-modèles de convertis non de la capture, et les barres obliques échappé: \b(?:(?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|((?:[^\s()<>]+|(?:([^\s()<>]+)))*))+(?:((?:[^\s()<>]+|(?:([^\s()<>]+)))*)|[^\s`!()[]{};:'".,<>?«»“”‘]))
Tld peuvent avoir beaucoup plus de 4 caractères, voir: iana.org/domains/root/db
Et comment pouvons-nous utiliser cette expression dans preg? Je veux dire, parce qu'il a
"
et'
le code ne fonctionne pas correctement, comme:preg_match('(?i)\b......]))', $str)
- tous les code me semble qu'il est commenté.OriginalL'auteur
Il ne correspond à l'adresse http/https, mais c'est vraiment le seul protocole que vous souhaitez transformer en un lien. Si vous voulez que les autres, vous pouvez le modifier comme ceci:
<
ou appliquerhtmlspecialchars
sur la chaîne trouvée pour éviter l'injection de code.Bon, mais si vous regardez l'expression, il permet à tout, mais d'un espace blanc et
"
. Je crois que cela élimine toute HTML injection.Bron: Non, vous êtes à l'aide de la correspondance de la valeur non seulement en tant que valeur de l'attribut, mais aussi comme les éléments de contenu de texte.
Oh, belle prise. Je l'ai changé, merci.
OriginalL'auteur Jonah
Yahoo! Réponses fait un assez bon travail de lien d'identification lorsque le lien est correctement écrit et séparée du reste du texte, mais il n'est pas très bon à la séparation de fuite de la ponctuation. Par exemple
The links are http://example.com/somepage.php, http://example.com/somepage2.php, and http://example.com/somepage3.php.
comprendra des virgules sur les deux premiers et une période sur la troisième.Mais si c'est acceptable, puis des modèles comme ça devrait le faire:
Il ressemble à stackoverflow de l'analyseur est mieux. Est est open source?
OriginalL'auteur wallyk
Ce code est travaillé pour moi.
OriginalL'auteur Paras Dalsaniya