PHP 转换HTML实体并防止HTML标签发生变化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 转换HTML实体并防止HTML标签发生变化相关的知识,希望对你有一定的参考价值。

function entiConv($txt) {
  // Liste mit Umlauten abfragen und Klammern rauslöschen:
  $table = get_html_translation_table(HTML_ENTITIES);
  unset($table['<']);
  unset($table['>']);

  // Das Zeichen & ganz oben im Array platzieren, damit dieses Zeichen in den Ersetzungen nicht nochmal ersetzt wird:
  $temp = $table['&'];
  unset($table['&']);
  $table = array_reverse($table, true);
  $table['&'] = $temp;
  $table = array_reverse($table, true);

  // Erst die Entities in echte Werte umwandeln - Beispiel String:
  // "Hallo Entities & Leser und & Programmierer" wird zu "Hallo Entities & Leser und & Programmierer"
  foreach($table as $key => $value) {
     if($key == "\"") {
       // Anführungsstriche nur außerhalb von HTML-Tags ersetzen:
       $txt = preg_replace("/((<[^>]*)|$value)/e", '"\2"=="\1" ? "\1" : "$key"', $txt);
     } else {
       $txt = preg_replace("/$value/", $key, $txt);            
     }
  }
  // Dann die echten Werte in Entities umwandeln - Beispiel String:
  // "Hallo Entities & Leser und & Programmierer" wird zu "Hallo Entities & Leser und & Programmierer"
  foreach($table as $key => $value) {
    if($key == "\"") {
      // Anführungsstriche nur außerhalb von HTML-Tags ersetzen:
      $txt = preg_replace("/((<[^>]*)|$key)/e", '"\2"=="\1" ? "\1" : "$value"', $txt);
    } else {
      $txt = preg_replace("/$key/", $value, $txt);            
    }
  }
  return $txt;
}

以上是关于PHP 转换HTML实体并防止HTML标签发生变化的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 PHP 的 DOMDocument 编码 html 实体?

PHP 将从数据库中读出的带有html标签的字符串,让标签起效,显示在前台页面

PHP中的htmlentities但保留html标签

PHP怎么将HTML实体转换为普通字符

addslashes,htmlspecialchars,htmlentities转换或者转义php特殊字符防止xss攻击以及sql注入

将 html 移动到 php 后发生的变化包括