Как удалить специальные символы html?

Я создаю файл RSS-канала для своего приложения, в котором хочу удалить теги HTML, которые выполняются с помощью strip_tags. Но strip_tags не удаляет специальные символы HTML:

  & © 

и др.

Скажите, пожалуйста, любую функцию, которую я могу использовать для удаления этих специальных символов кода из моей строки.

+46
18 мар. '09 в 10:09
источник поделиться
13 ответов

Либо декодировать их с помощью html_entity_decode, либо удалить их с помощью preg_replace:

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

(Из здесь)

РЕДАКТИРОВАТЬ: Альтернатива по словам Jacco comment

может быть приятно заменить '+' на {2,8} или что-то в этом роде. Это ограничит шанс заменить весь предложения, когда unencoded '&' является присутствует.

$Content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$Content); 
+94
18 мар. '09 в 10:16
источник

Используйте html_entity_decode для преобразования объектов HTML.

Вам нужно установить кодировку, чтобы она работала правильно.

+18
18 мар. '09 в 10:15
источник
другие ответы

Связанные вопросы


Похожие вопросы

В дополнение к хорошим ответам выше, PHP также имеет встроенную функцию фильтра, которая весьма полезна: filter-var.

Чтобы удалить символы HMTL, используйте:

$cleanString = filter_var($dirtyString, FILTER_SANITIZE_STRING);

Дополнительная информация:

+16
16 февр. '12 в 16:59
источник

Вы можете посмотреть htmlentities() и html_entity_decode() здесь

$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
+7
18 мар. '09 в 10:16
источник

Это может сработать для удаления специальных символов.

$modifiedString = preg_replace("/[^a-zA-Z0-9_.-\s]/", "", $content); 
+2
29 мар. '13 в 9:58
источник

То, что я сделал, это использовать: html_entity_decode, затем использовать strip_tags, чтобы удалить их.

+2
16 дек. '13 в 15:36
источник

попробуйте это

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

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

// Outputs "!!!"
echo htmlentities($str, ENT_QUOTES | ENT_IGNORE, "UTF-8");
?>
+2
11 мар. '14 в 4:11
источник

Простой ванильный шнур способ сделать это без привлечения двигателя regx preg:

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;
}
+1
18 мар. '09 в 11:19
источник

Похоже, что вы действительно хотите:

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);
}

Он заменяет именованные объекты их эквивалентом числа.

+1
18 мар. '09 в 16:21
источник
<?php
function strip_only($str, $tags, $stripContent = false) {
    $content = '';
    if(!is_array($tags)) {
        $tags = (strpos($str, '>') !== false
                 ? explode('>', str_replace('<', '', $tags))
                 : array($tags));
        if(end($tags) == '') array_pop($tags);
    }
    foreach($tags as $tag) {
        if ($stripContent)
             $content = '(.+</'.$tag.'[^>]*>|)';
         $str = preg_replace('#</?'.$tag.'[^>]*>'.$content.'#is', '', $str);
    }
    return $str;
}

$str = '<font color="red">red</font> text';
$tags = 'font';
$a = strip_only($str, $tags); // red text
$b = strip_only($str, $tags, true); // text
?> 
+1
10 июл. '10 в 11:43
источник

Функция, которую я использовал для выполнения задачи, присоединяется к обновлению, выполняемому schnaader:

    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'])))

Эта функция удаляет все теги html и html, преобразованные в UTF-8, готовые к сохранению в MySQL

+1
14 июл. '11 в 15:08
источник

Вы можете попробовать htmlspecialchars_decode($string). Это работает для меня.

http://www.w3schools.com/php/func_string_htmlspecialchars_decode.asp

0
01 окт. '15 в 12:56
источник
$string = "äáčé";

$convert = Array(
        'ä'=>'a',
        'Ä'=>'A',
        'á'=>'a',
        'Á'=>'A',
        'à'=>'a',
        'À'=>'A',
        'ã'=>'a',
        'Ã'=>'A',
        'â'=>'a',
        'Â'=>'A',
        'č'=>'c',
        'Č'=>'C',
        'ć'=>'c',
        'Ć'=>'C',
        'ď'=>'d',
        'Ď'=>'D',
        'ě'=>'e',
        'Ě'=>'E',
        'é'=>'e',
        'É'=>'E',
        'ë'=>'e',
    );

$string = strtr($string , $convert );

echo $string; //aace
-1
13 мая '15 в 11:32
источник

Посмотрите другие вопросы по меткам или Задайте вопрос