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;
}
Один человек предложил заменить весь этот скрипт одним вкладышем:
$clear = preg_replace('/[^A-Za-z0-9\-]/', '', urldecode($_GET['id']));
но это дает ошибку с командой $ _GET — неизвестный идентификатор переменной
то, что я ищу, — это самый простой скрипт для удаления всего HTML-кода и странных символов, замены символов возврата каретки пробелами и пунктуации, такой как точки с запятыми и восклицательные знаки.
Есть много похожих вопросов, но ни один из них не дает правильного ответа на этот вопрос, и эти сценарии убирают все символы, включая знаки препинания и иностранные арабские шрифты или испанский.
например, если строка содержит
www.mygreatwebsite.com
более чистый скрипт вернет wwwmygreatwebsitecom
что выглядит странно
Если кто-то взволнован чем-то вроде «Эй, это отличный сайт! он также удаляет восклицательные знаки.
Все подобные вопросы, которые я посмотрел, удаляют всех персонажей ….
Я бы хотел оставить в IN знаки препинания и любые символы иностранных языков с помощью одной простой команды регулярного выражения, которая удаляет все элементы, которые люди вставляют в формы, но оставляет знаки препинания.
Естественно, возврат каретки будет заменен пробелами.
Какие-либо предложения?
Чтобы удалить весь HTML-код, это просто, используйте strip_tags
$text = strip_tags($html);
Но это работает, только если строка не содержит кода CSS или JavaScript.
Поэтому лучший способ решить эту проблему — использовать DOMDocument и XPath, чтобы найти все текстовые узлы, которые не имеют стиля или тега сценария в качестве предка:
$dom = new DOMDocument;
$dom->loadHTML($html);
$xp = new DOMXPath($dom);
$textNodeList = $xp->query('//text()[not(ancestor::script) and not(ancestor::style)]');
$text = '';
foreach($textNodeList as $textNode) {
$text .= ' '. $textNode->nodeValue;
}
заменить странные символы и символы пробела, кроме знаков препинания, пробелом:
$text = preg_replace('~[^\pP\pL\pN]+~u', ' ', $text);
куда \pP
класс символов для знаков пунктуации, \pL
для писем, \pN
для цифр. (чтобы быть более точным в отношении символов, которые вы хотите сохранить, посмотрите на доступные классы символов Вот (поиск по «свойствам символов Юникода»))
очевидно, вы можете обрезать текст до конца:
$text = trim($text);
попробуйте эту библиотеку для фильтрации вещей
http://htmlpurifier.org/
function removeHTML($html) {
require_once('htmlpurifier/library/HTMLPurifier.auto.php');
$config = HTMLPurifier_Config::createDefault();
$config->set('Core', 'Encoding', 'ISO-8859-1'); // not using UTF-8
$config->set('HTML', 'Allowed', ''); // Allow Nothing
$purifier = new HTMLPurifier($config);
return $purifier->purify($html);
}