Html özel karakter nasıl kaldırılır?

10 Cevap php

Ben strip_tags tarafından yapılır Ama strip_tags html özel karakter kodu kaldırarak değil HTML etiketlerini kaldırmak istediğiniz benim uygulama için bir rss feed dosyası oluşturma

  & © etc

Bana benim dize bu özel kod karakter kaldırabilirsiniz hangi kullanarak herhangi bir fonksiyonu söyle,

10 Cevap

html_entity_decode kullanarak bunları çözmek ya da kullanarak bunları kaldırmak preg_replace Ya:

$Content = preg_replace("/&#?[a-z0-9]+;/i","",$Content);

(Gönderen here)

EDIT: Alternatif Jacco yorumuna göre

might be nice to replace the '+' with {2,8} or something. This will limit the chance of replacing entire sentences when an unencoded '&' is present.

$Content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$Content);

Filtre var: Yukarıda iyi yanıtlar yanı sıra, PHP de oldukça yararlı bir dahili filtre işlevi vardır.

HMTL karakterleri kaldırmak için kullanın:

$cleanString = filter_var($dirtyString, FILTER_SANITIZE_STRING);

More info:

  1. function.filter-var
  2. filter_sanitize_string

Sen (Bir Htmlentities bakmak () ve html_entity_decode almak isteyebilirsiniz) here

$orig = "I'll \"walk\" the <b>dog</b> now";

$a = htmlentities($orig);

$b = html_entity_decode($a);

echo $a; // I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now

echo $b; // I'll "walk" the <b>dog</b> now

Gebelik regex motoru çekici olmadan bunu yapmak için bir düz vanilya dizeleri yolu:

function remEntities($str) {
  if(substr_count($str, '&') && substr_count($str, ';')) {
    // Find amper
    $amp_pos = strpos($str, '&');
    //Find the ;
    $semi_pos = strpos($str, ';');
    // Only if the ; is after the &
    if($semi_pos > $amp_pos) {
      //is a HTML entity, try to remove
      $tmp = substr($str, 0, $amp_pos);
      $tmp = $tmp. substr($str, $semi_pos + 1, strlen($str));
      $str = $tmp;
      //Has another entity in it?
      if(substr_count($str, '&') && substr_count($str, ';'))
        $str = remEntities($tmp);
    }
  }
  return $str;
}

Gerçekten ne istiyorum gibi görünüyor:

function xmlEntities($string) {
    $translationTable = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);

    foreach ($translationTable as $char => $entity) {
        $from[] = $entity;
        $to[] = '&#'.ord($char).';';
    }
    return str_replace($from, $to, $string);
}

Bu onların sayı-eşdeğeri ile adlandırılmış-varlıkları değiştirir.

Ben schnaader tarafından yapılan yükseltme katılarak, görevi gerçekleştirmek için kullanılan fonksiyon:

    mysql_real_escape_string(
        preg_replace_callback("/&#?[a-z0-9]+;/i", function($m) { 
            return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); 
        }, strip_tags($row['cuerpo'])))

Bu fonksiyon her html etiketi ve html simgesini kaldırır, MySQL kaydetmek için hazır UTF-8 dönüştürüldü

Bu özel karakterleri kaldırmak için işe yarayabilecek.

$modifiedString = preg_replace("/[^a-zA-Z0-9_.-\s]/", "", $content); 

html_entity_decode, sonra onları kaldırıldı için strip_tags kullanın: Ben ne yaptım kullanımı idi.

Bu deneyin

<?php
$str = "\x8F!!!";

// Outputs an empty string
echo htmlentities($str, ENT_QUOTES, "UTF-8");

// Outputs "!!!"
echo htmlentities($str, ENT_QUOTES | ENT_IGNORE, "UTF-8");
?>