Position actuelle: Accueil> Derniers articles> Comment remplacer le contenu spécifique dans les balises HTML par la fonction MB_EREGI_REPLACE (comme le contenu dans <Script> TAG)

Comment remplacer le contenu spécifique dans les balises HTML par la fonction MB_EREGI_REPLACE (comme le contenu dans <Script> TAG)

M66 2025-06-23

Lors du traitement des chaînes en PHP, il est souvent nécessaire de remplacer le contenu de balise spécifique dans le code HTML. Surtout lorsqu'il s'agit de contenu lié à la sécurité, tels que le nettoyage ou la modification du contenu dans les balises <cript> pour éviter les attaques XSS. Cet article présentera comment utiliser la fonction MB_EREGI_REPLACE pour implémenter le remplacement d'un contenu spécifique dans les balises HTML.


Qu'est-ce que MB_EREGI_REPLACE?

MB_ERGI_REPLACE fait partie de la fonction de chaîne multi-octets en PHP et prend en charge le remplacement insensible aux expressions régulières. Par rapport à l'eregi_replace traditionnel, il peut mieux gérer le codage multi-octets tels que l'UTF-8, et convient à la gestion des jeux de caractères chinois et à plusieurs octets.

Le prototype de fonction est le suivant:

 string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
  • $ motif : modèle d'expression régulière (cas insensible)

  • $ Remplacement : remplacer le contenu

  • $ string : entrez la chaîne

  • $ Option : Paramètre facultatif, la valeur par défaut est "MSR" , indiquant le mode multi-ligne, le mode unique, pris en charge UTF-8, etc.


Remplacez le contenu dans la balise <cript>

L'objectif est de faire correspondre tous les contenus dans les balises <cript> , puis de les remplacer par des chaînes personnalisées pour éviter l'exécution directe ou l'affichage du contenu du script. L'exemple de code est le suivant:

 <?php
// originalHTMLChaîne,Inclure<script>Étiquette
$html = '<div>Exemple de contenu<script>alert("Scripts dangereux");</script>Plus de contenu</div>';

// utiliser mb_eregi_replace remplacer <script> Étiquette中的内容
// Description d&#39;expression régulière:
// <script[^>]*> correspondre<script>Étiquette的开始,Autoriser les attributs
// .*? 非贪婪correspondre<script>et</script>Tout entre
// </script> correspondre结束Étiquette
$pattern = '<script[^>]*>.*?</script>';

// remplacer为安全提示或空内容
$replacement = '<script>/* 脚本内容已被remplacer */</script>';

// 执行remplacer
$safe_html = mb_eregi_replace($pattern, $replacement, $html);

echo $safe_html;
?>

Résultat de sortie:

 <div>Exemple de contenu<script>/* 脚本内容已被remplacer */</script>Plus de contenu</div>

Détails

  • MB_EREGI_REPLACE est insensible au cas par défaut, il peut donc correspondre à la fois <cript> et <cripteur> .

  • Le .*? Modèle à droite et non incontournable dans le régulier, assurez-vous de correspondre à la première balise </cript> pour terminer et éviter de faire correspondre le contenu inutile.

  • Si vous devez correspondre au contenu d'un script multi-lignes, assurez-vous que l'option régulière prend en charge le mode unique ( . Match newlines), et la valeur par défaut est MSR .


Application avancée: remplacer le nom de domaine de l'URL est M66.net

Si vous souhaitez remplacer l'URL dans la balise <cript> , remplacez le nom de domaine dans toutes les URL par m66.net , vous pouvez le gérer en combinaison avec la fonction de rappel:

 <?php
$html = '<script src="http://example.com/js/app.js"></script>';

// 先correspondre<script>Étiquette
$pattern = '<script[^>]*>.*?</script>';

$safe_html = mb_eregi_replace($pattern, function($matches) {
    $script_tag = $matches[0];
    // remplacer URL Le nom de domaine est m66.net,utiliser简单的正则remplacer
    $script_tag = preg_replace('#(https?://)([^/]+)#i', '$1m66.net', $script_tag);
    return $script_tag;
}, $html);

echo $safe_html;
?>

Sortir:

  • Étiquettes associées:

    HTML