Как удалить html специальные символы?
Я создаю файл RSS-канала для моего приложения, в котором я хочу удалить HTML-теги, что делается strip_tags
. Но strip_tags
не удаляет HTML специальный код символов:
& ©
etc.
пожалуйста, скажите мне любую функцию, которую я могу использовать, чтобы удалить эти специальные символы кода из моей строки.
14 ответов:
как расшифровать их с помощью
html_entity_decode
или удалить их с помощьюpreg_replace
:$Content = preg_replace("/&#?[a-z0-9]+;/i","",$Content);
(от здесь)
EDIT: альтернатива в соответствии с комментарием Жакко
было бы неплохо заменить '+' с {2,8} или что-то в этом роде. Это будет ограничивать возможность замены всего предложения, когда unencoded ' & ' является подарок.
$Content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$Content);
использовать
html_entity_decode
для преобразования HTML-объектов.вам нужно будет установить кодировку, чтобы она работала правильно.
В дополнение к хорошим ответам выше, PHP также имеет встроенную функцию фильтра, которая весьма полезна: filter-var.
чтобы удалить символы HMTL, используйте:
$cleanString = filter_var($dirtyString, FILTER_SANITIZE_STRING);
Подробнее:
вы можете взглянуть на 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
Это может хорошо работать для удаления специальных символов.
$modifiedString = preg_replace("/[^a-zA-Z0-9_.-\s]/", "", $content);
попробуй такое
<?php $str = "\x8F!!!"; // Outputs an empty string echo htmlentities($str, ENT_QUOTES, "UTF-8"); // Outputs "!!!" echo htmlentities($str, ENT_QUOTES | ENT_IGNORE, "UTF-8"); ?>
простой ваниль строки способ сделать это без привлечения preg regex engine:
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; }
похоже, что вы действительно хотите это:
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); }
Он заменяет именованные сущности их числовым эквивалентом.
<?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 ?>
функция, которую я использовал для выполнения задачи, присоединившись к обновлению, сделанному 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
если вы хотите преобразование специальные символы HTML, а не просто удалить их, а также раздеть вещи и подготовиться к простому тексту это было решение, которое работало для меня...
function htmlToPlainText($str){ $str = str_replace(' ', ' ', $str); $str = html_entity_decode($str, ENT_QUOTES | ENT_COMPAT , 'UTF-8'); $str = html_entity_decode($str, ENT_HTML5, 'UTF-8'); $str = html_entity_decode($str); $str = htmlspecialchars_decode($str); $str = strip_tags($str); return $str; } $string = '<p>this is ( ) a test</p> <div>Yes this is! & does it get "processed"? </div>' htmlToPlainText($string); // "this is ( ) a test. Yes this is! & does it get processed?"`
html_entity_decode w / ENT_QUOTES | ENT_XML1 преобразует такие вещи, как
'
htmlspecialchars_decode преобразует такие вещи, как&
html_entity_decode преобразует такие вещи, как'<
и strip_tags удаляет все оставшиеся HTML-теги.EDIT - Добавлена str_replace (' ' ,'', $str); и несколько других html_entity_decode () как продолжение тестирования показало необходимость в них.
вы можете попробовать
htmlspecialchars_decode($string)
. Это работает на меня.http://www.w3schools.com/php/func_string_htmlspecialchars_decode.asp
$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