Permet de dire que le contenu de $ est le contenu d'un textarea ceci fonctionnait correctement pour les liens, mais réalisa qu'il enfreignait le balisage lorsqu'une image est dans le texte ... P> J'essaie comme ça maintenant: p> Comme les images sont respectées, mais le problème est que l'URL est avec http: // ou https: // le format ne sera pas converti maintenant ..: P> Google.com -> Non converti (comme prévu) p>
www.google.com -> bien converti p>
http://google.com -> non converti (inattendu) p>
https://google.com -> non converti (inattendu) p>
blockQquote> Qu'est-ce que je manque? p> -edit - P> Solution presque actuelle: P>
$content = preg_replace('!(\s|^)((https?://)+[a-z0-9_./?=&-]+)!i', ' <a href="$2" target="_blank">$2</a> ', nl2br($_POST['content'])." ");
$content = preg_replace('!(\s|^)((www\.)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="http://$2" target="_blank">$2</a> ', $content." ");
5 Réponses :
Vous ne pouvez pas à 100%. Becuase il peut y avoir des liens tels que Si vous ne ciblez que ces liens: P> stackoverflow.com code> qui n'ont pas
www. Code>.
(https?://)
Pour www-Moins d'URL, ne pouviez pas utiliser # \ b \ s + \. \ S {3} \ b # code>?
@Phpmycoder: "HI -.MY NOM est la vérité! Mon anglais n'est pas parfait!"
Les URL sans le www. Code> peuvent être jumelés avec
# \ b \ s + \. \ S {3} \ b # code>. Cela ne tient pas compte des TLD comme
.co.uk code>, mais il couvrira vos bases:
.com code>,
.org code>,
.NET code>, etc.
Lire mon commentaire. Cela correspondra même s'il n'y a pas d'URL là-bas. En outre, vous allez correspondre à .......... code>
Vérifiez avec Regexr. Sauf si je copie quelque chose de problème ni de ces matchs pour moi.
@Danlee Point pris. Je modifierais ensuite pour couvrir explicitement les TLDs populaires + Subdomains + sous-domaines: # \ b (https ?: //)? (A-Z0-9-] + \.) + (COM | org | net | Edu) \ b # i code>
Essayez ceci: Il prendra des liens commençant par http: // ou www. p> exemple p> p>
Salut là-bas, allait bien, mais maintenant j'ai besoin de plus de cas .. Aussi j'ai offert une prime;)
Au tout début, il suffit d'ajouter s? code> après http. Cela rend le
S code> en option afin de fonctionner avec HTTP et HTTPS. Vous n'avez pas besoin d'utiliser deux prg Remplacer comme si vous avez dans votre question.
Je vois, mais j'ai besoin de freg_replaces, non? Parce que dans le cas de www.web.com, je dois ajouter le HTTP: // (Voyez-vous une alternative pour cette seconde expression?)
Hmm ouais, je suppose que vous auriez besoin de deux ... Je n'ai pas encore pu venir avec quoi que ce soit.
Bonjour à nouveau, je viens de réaliser que cela essaierait de convertir des images qui peuvent être dans le texte! c'est un vrai problème; Je sais que cela ne fait pas partie de la question, mais pourriez-vous me donner un indice? Merci
Correct :( Donc, je suppose que nous pourrions ajouter (je veux dire avec votre aide) que l'URL ne peut pas être bettwen
Je t'aime mon frère ', va tester et vous faire savoir. Merci
Bonjour encore, j'ai pu tester; Mais cela ne semble pas convertir les URL (mais elle respecte les images). Aucun des 3 cas d'URL n'est converti. Edité la Cuestion avec code actuel (mélange de votre dernière réponse et celui pour convertir le www. Ceux et prépendez le HTTP: //), une idée?
@Tonimichelcaubet essayez-vous cela au début de la chaîne? Ie " blah.com est un site web" - cela ne fonctionnera pas comme l'expression ci-dessus attend un \ s ( espace) Pour commencer avec le début du code ci-dessus doit être changé de:! \ s à! (\ s | ^) qui leur permettra au début
BTW: semble les détecter, mais crée un lien vide (avec URL vide et texte)
Drôle juste pour tester j'ai essayé $ 2 et ça fonctionne maintenant :)
Vous avez raison, il devrait être de 2 $ parce que je l'ai modifié avec le commentaire de @WilliamVicary et ajouté un autre groupe de capture
Aha mon mauvais, si vous ne voulez pas que cela correspondre, vous pouvez le faire: (?: \ S | ^)
Une idée pourquoi ils ne peuvent pas être le premier élément du texte? ils ont besoin d'un espace vide juste avant
Avez-vous (\ s | ^) code> au début? Cela signifie qu'il correspondra à un espace ou au début du texte.
Une autre méthode pour ajouter d'ajouter des hyperliens est que vous pouvez prendre le texte que vous souhaitez analyser pour les liens et l'exploser dans un tableau. Puis boucle à travers elle à l'aide de Foreach (fonction très rapide - http://www.phpbench.com/ ) et changer Tout ce qui commence par http: // ou https: // ou www., ou se termine par .com / .org / etc dans un lien.
Je pense peut-être quelque chose comme ceci: P> < PRE> XXX PRE>
Vos modifications seront reflétées dans le tableau car vous aviez le "&" avant $ USERText dans votre déclaration de Foreach. Maintenant, implorez simplement la matrice dans une chaîne et vous êtes prêt à partir. P>
C'est un sens dans ma tête ... mais je ne suis pas sûr à 100% que c'est ce que vous recherchez p> p>
J'ai eu un problème similaire. Voici la fonction qui m'a aidé. Peut-être qu'il conviendra à vos besoins:
$url = "http://www.". clHost($link);
Mais cela serait appliqué à la droite de l'URL directe, je dois numériser des URL dans un texte. Merci
Le problème est que votre démarrage est forçant le match pour commencer avec un espace, donc si vous n'avez pas cet espace de départ, votre match échoue. Le REG EXP est bien (sans le), mais pour éviter de remplacer les images dont vous avez besoin pour ajouter quelque chose à éviter de les faire correspondre. P>
Si les images sont pure HTML, utilisez ceci:
qui recherchera SRC = "avant l'URL, pour l'ignorer. P>
Si vous utilisez une autre marque, dites-moi et je vais essayer de trouver un autre moyen d'éviter les images. P> \ s ((https ?: // | www.) + [a-z0-9_./?=&-] +) code> p>
(? p> p> P>
Salut essayé cela, mais il convertira des liens vides avec du texte vide; Même si j'utilise 1 $ ou 2 $ ..
Peut-être que cette question aide: Stackoverflow.com/questions/161738/...
Vous pouvez regarder daringfireball.net/2010/07/imProved_regex_for_matching_regex_for_matching_urls et MATHIASBYNENS.BE/DEMO/URL-REGEX