Maison >développement back-end >tutoriel php >Comment détecter et convertir des URL en liens HTML en PHP ?
Détecter et convertir les URL en liens HTML dans le texte
Dans diverses applications en ligne, la conversion des URL mentionnées dans le texte en liens cliquables est une exigence courante . Voyons comment y parvenir en PHP.
Exigences
Solution
Régulier Approche basée sur les expressions
Créons une expression régulière qui correspond aux URL valides et à leurs éléments constitutifs :
$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]+?)?'; $rex = "&\b$rexProtocol$rexDomain$rexPort$rexPath$rexQuery$rexFragment(?=[?.!,;:\"]?(\s|$))&";
Mise en œuvre
Nous peut utiliser preg_match_all() pour trouver toutes les correspondances d'URL dans le texte :
preg_match_all($rex, htmlspecialchars($text), $matches, PREG_OFFSET_CAPTURE);
Convertir en liens HTML
Nous allons parcourir les correspondances et créer les liens HTML appropriés :
foreach ($matches[0] as $match) { $url = $match[0]; $domain = $matches[2][0]; $path = $matches[4][0]; $completeUrl = $matches[1][0] ? $url : "http://$url"; $htmlLink = "<a href='$completeUrl'>$domain$path</a>"; $text = str_replace($url, $htmlLink, $text); }
Cette approche gère efficacement la plupart des formats d'URL tout en maintenant la sécurité contre les attaques XSS.
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!