Comment convertir des URL en texte HTML en liens sans affecter les URL dans les balises ?

Linda Hamilton
Libérer: 2024-10-29 07:26:02
original
1050 Les gens l'ont consulté

 How to Convert URLs in HTML Text to Links without Affecting URLs within Tags?

Convertir les URL en texte HTML en liens sans affecter les URL dans les balises

Votre problème consiste à trouver un moyen de convertir uniquement les URL en texte en liens cliquables dans le contenu HTML. Cependant, actuellement, le modèle que vous utilisez convertit également involontairement les URL dans les balises.

Une approche précise utilisant DOM et XPath

Pour résoudre ce problème, nous utiliserons DOM (Document Object Model) et XPath. Concrètement, XPath nous permet de parcourir le document HTML et de sélectionner des éléments spécifiques en fonction de critères précis. Dans ce cas, nous devons identifier les nœuds de texte qui contiennent des URL et ne sont pas des descendants d'éléments d'ancrage ().

La requête XPath suivante peut effectivement y parvenir :

/html/body//text()[
    not(ancestor::a) and (
        contains(., "http://") or
        contains(., "https://") or
        contains(., "ftp://")
    )
]
Copier après la connexion

Cette requête ne prend en compte que les nœuds de texte qui n'appartiennent pas aux ancres et contiennent au moins un des protocoles URL pris en charge.

Transformation dynamique des nœuds de texte

Une fois que nous avons les nœuds de texte concernés, nous pouvons utiliser la fonction PREG_REPLACE de PHP pour modifier leur contenu. Voici comment nous pouvons remplacer le texte par les balises d'ancrage correspondantes :

foreach ($texts as $text) {
    $fragment = $dom->createDocumentFragment();
    $fragment->appendXML(
        preg_replace(
            "~((?:http|https|ftp)://(?:\S*?\.\S*?))(?=\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|<|$|\.\s)~i",
            '<a href=""></a>',
            $text->data
        )
    );
    $text->parentNode->replaceChild($fragment, $text);
}
Copier après la connexion

Ce code crée des fragments de document, modifie le texte de chaque fragment à l'aide du modèle PREG_REPLACE, puis remplace les nœuds de texte d'origine par les fragments modifiés.

En suivant cette approche, vous pouvez convertir efficacement les URL de texte en liens cliquables tout en excluant les URL dans les balises, vous offrant ainsi la fonctionnalité souhaitée.

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