Вырезать HTML и специальные символы

Я хотел бы использовать любую php-функцию или что угодно, чтобы я мог удалить любой код HTML и специальные символы и дал мне только буквенно-цифровой вывод

$des = "Hello world)<b> (*&^%$#@! it's me: and; love you.<p>"; 

Я хочу, чтобы результат стал Hello world it s me and love you (просто Aa-Zz-0-9-WhiteSpace)

Я пробовал strip_tags но он удаляет только HTML-коды

 $clear = strip_tags($des); echo $clear; 

так есть ли способ сделать это ~ Спасибо

Solutions Collecting From Web of "Вырезать HTML и специальные символы"

Вероятно, лучше для замены регулярного выражения

 // Strip HTML Tags $clear = strip_tags($des); // Clean up things like &amp; $clear = html_entity_decode($clear); // Strip out any url-encoded stuff $clear = urldecode($clear); // Replace non-AlNum characters with space $clear = preg_replace('/[^A-Za-z0-9]/', ' ', $clear); // Replace Multiple spaces with single space $clear = preg_replace('/ +/', ' ', $clear); // Trim the string of leading/trailing space $clear = trim($clear); 

Или, за один раз

 $clear = trim(preg_replace('/ +/', ' ', preg_replace('/[^A-Za-z0-9 ]/', ' ', urldecode(html_entity_decode(strip_tags($des)))))); 

Разделите теги, оставьте только буквенно-цифровые символы и пробел:

 $clear = preg_replace('/[^a-zA-Z0-9\s]/', '', strip_tags($des)); 

Изменить: все кредиты DaveRandom для идеального решения …

 $clear = preg_replace('/[^a-zA-Z0-9\s]/', '', strip_tags(html_entity_decode($des))); 

Более подробно из приведенного выше примера. Ниже рассматривается ваша строка:

 $string = '<div>This..</div> <a>is<a/> <strong>hello</strong> <i>world</i> ! هذا هو مرحبا العالم! !@#$%^&&**(*)<>?:";p[]"/.,\|`~1@#$%^&^&*(()908978867564564534423412313`1`` "Arabic Text نص عربي test 123 و,.m,............ ~~~ ٍ،]ٍْ}~ِ]ٍ}"; '; 

Код:

 echo preg_replace('/[^A-Za-z0-9 !@#$%^&*().]/u','', strip_tags($string)); 

Allows: английские буквы («Столичный» и «маленький»), от 0 до 9 и символы !@#$%^&*().

Removes: все теги html и специальные символы, кроме указанных выше

Вы можете сделать это в одной строке :), особенно полезно для запросов GET или POST

 $clear = preg_replace('/[^A-Za-z0-9\-]/', '', urldecode($_GET['id'])); 

Вот функция, которую я использовал, которую я собрал из разных потоков в сети, которая удаляет все, все теги и оставляет вас с идеальной фразой. Кто-нибудь знает, как изменить этот скрипт, чтобы разрешить периоды (.)? Другими словами, оставьте все «как есть», но оставьте периоды в одиночку или другие знаки препинания, как и! или запятой? дай мне знать.

 function stripAlpha( $item ) { $search = array( '@<script[^>]*?>.*?</script>@si' // Strip out javascript ,'@<style[^>]*?>.*?</style>@siU' // Strip style tags properly ,'@<[\/\!]*?[^<>]*?>@si' // Strip out HTML tags ,'@<![\s\S]*?–[ \t\n\r]*>@' // Strip multi-line comments including CDATA ,'/\s{2,}/' ,'/(\s){2,}/' ); $pattern = array( '#[^a-zA-Z ]#' // Non alpha characters ,'/\s+/' // More than one whitespace ); $replace = array( '' ,' ' ); $item = preg_replace( $search, '', html_entity_decode( $item ) ); $item = trim( preg_replace( $pattern, $replace, strip_tags( $item ) ) ); return $item; } 

Все остальные решения жуткие, потому что они от кого-то, кто высокомерно думает, что английский язык является единственным языком в мире 🙂

Все эти решения разделяют также диакритические символы, такие как ç или à.

Идеальное решение, как указано в документации PHP , просто:

 $clear = strip_tags($des); 

чтобы периоды и любой другой персонаж просто добавляли их так:

change: ' #[^a-zA-Z ]# ' to: ' #[^a-zA-Z .()!]# '

preg_replace('/[^a-zA-Z0-9\s]/', '',$string) который используется для удаления только специального символа, а не пробела между строками.

Удалить все специальные символы не дают пробелу писать в одной строке

 trim(preg_replace('/ +/', ' ', preg_replace('/[^A-Za-z0-9 ]/', ' ', urldecode(html_entity_decode(strip_tags($string))))));