Maison > développement back-end > tutoriel php > Comment puis-je détecter et lier des URL dans du texte PHP à l'aide d'expressions régulières ?

Comment puis-je détecter et lier des URL dans du texte PHP à l'aide d'expressions régulières ?

Mary-Kate Olsen
Libérer: 2024-12-18 10:41:18
original
261 Les gens l'ont consulté

How Can I Detect and Linkify URLs in PHP Text Using Regular Expressions?

Détecter et lier les URL dans le texte

Lorsque vous travaillez avec du texte fourni par l'utilisateur, il est souvent nécessaire d'identifier et de lier les URL intégrées dans le texte . Voici comment y parvenir en PHP :

Utiliser une expression régulière

Pour détecter les URL, vous pouvez utiliser l'expression régulière suivante :

$rexProtocol = '(https?://)?';
$rexDomain   = '((?:[-a-zA-Z0-9]{1,63}\.)+[-a-zA-Z0-9]{2,63}|(?:[0-9]{1,3}\.){3}[0-9]{1,3})';
$rexPort     = '(:[0-9]{1,5})?';
$rexPath     = '(/[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]*?)?';
$rexQuery    = '(\?[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?';
$rexFragment = '(#[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?';

$regex = "&\b$rexProtocol$rexDomain$rexPort$rexPath$rexQuery$rexFragment(?=[?.!,;:\"]?(\s|$))&";
Copier après la connexion

Cette expression régulière correspondra :

  • Protocole facultatif (http:// ou https://)
  • Nom de domaine ou adresse IP
  • Numéro de port facultatif
  • Chemin facultatif
  • Chaîne de requête facultative
  • Fragment facultatif identifiant

Création Hyperliens

Une fois les URL détectées, vous pouvez utiliser la fonction de rappel suivante pour créer des hyperliens HTML :

function callback($match)
{
    $completeUrl = $match[1] ? $match[0] : "http://{$match[0]}";

    return '<a href="' . $completeUrl . '">'
        . $match[2] . $match[3] . $match[4] . '</a>';
}
Copier après la connexion

Cette fonction ajoute "http://" si aucun protocole n'est spécifié et crée une balise d'ancrage HTML avec l'URL détectée comme attribut href.

Application de l'expression régulière et Rappel

Enfin, vous pouvez utiliser preg_replace_callback pour appliquer l'expression régulière et créer des hyperliens pour toutes les URL détectées :

$text = "Here are some URLs: stackoverflow.com/questions/1188129/pregreplace-to-detect-html-php";

print preg_replace_callback($regex, 'callback', htmlspecialchars($text));
Copier après la connexion

Cela affichera le texte avec les URL détectées converties en liens cliquables .

Supplémentaire Considérations

  • Pour éviter les attaques XSS, échappez au texte fourni par l'utilisateur avant de le traiter avec l'expression régulière.
  • L'expression régulière fournie ne prend pas en charge toutes les variantes de syntaxe d'URL. Vous devrez peut-être l'affiner en fonction de vos besoins spécifiques.
  • Les adresses e-mail peuvent également être détectées et associées à des hyperliens en utilisant une approche similaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal