Как удалить специальные символы html?
Я создаю файл RSS-канала для своего приложения, в котором хочу удалить теги HTML, которые выполняются с помощью strip_tags
. Но strip_tags
не удаляет специальные символы HTML:
& ©
и др.
Скажите, пожалуйста, любую функцию, которую я могу использовать для удаления этих специальных символов кода из моей строки.
Ответы
Ответ 1
Либо декодировать их с помощью 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);
Ответ 2
Используйте html_entity_decode
для преобразования объектов HTML.
Вам нужно установить кодировку, чтобы она работала правильно.
Ответ 3
В дополнение к хорошим ответам выше, PHP также имеет встроенную функцию фильтра, которая весьма полезна: filter-var.
Чтобы удалить символы HMTL, используйте:
$cleanString = filter_var($dirtyString, FILTER_SANITIZE_STRING);
Дополнительная информация:
Ответ 4
Вы можете посмотреть 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 "walk" the <b>dog</b> now
echo $b; // I'll "walk" the <b>dog</b> now
Ответ 5
Это может сработать для удаления специальных символов.
$modifiedString = preg_replace("/[^a-zA-Z0-9_.-\s]/", "", $content);
Ответ 6
То, что я сделал, это использовать: html_entity_decode
, затем использовать strip_tags
, чтобы удалить их.
Ответ 7
попробуйте это
<?php
$str = "\x8F!!!";
// Outputs an empty string
echo htmlentities($str, ENT_QUOTES, "UTF-8");
// Outputs "!!!"
echo htmlentities($str, ENT_QUOTES | ENT_IGNORE, "UTF-8");
?>
Ответ 8
Простой ванильный шнур способ сделать это без привлечения двигателя 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;
}
Ответ 9
Похоже, что вы действительно хотите:
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);
}
Он заменяет именованные объекты их эквивалентом числа.
Ответ 10
<?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
?>
Ответ 11
Функция, которую я использовал для выполнения задачи, присоединяется к обновлению, выполняемому 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
Ответ 12
Вы можете попробовать htmlspecialchars_decode($string)
. Это работает для меня.
http://www.w3schools.com/php/func_string_htmlspecialchars_decode.asp
Ответ 13
$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