2015-05-11 4 views
0
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; 
} 

Один человек предложил заменить весь этот сценарий с одним вкладышем:Газа из HTML и злонамеренного кода, оставляя знаки препинания и иностранных языков в PHP

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

, но что дает ошибку с помощью команды $ _GET - неизвестную переменную ID

Я ищу самый простой скрипт для удаления всего кода HTML и странных символов, заменяя возврат каретки пробелами и оставляя знаки препинания, как точки и запятые.

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

, например, если строка содержит www.mygreatwebsite.com

уборщик скрипт возвратит wwwmygreatwebsitecom , который выглядит странно.

Если кто-то в восторге от чего-то типа «Эй, это отличный сайт! 'также удаляет восклицательные знаки.

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

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

Естественно, возврат каретки будет заменен пробелами.

Любые предложения?

ответ

3

Чтобы удалить все 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 для цифр.(Точнее о персонажах, которые вы хотите сохранить, посмотрите на доступные классы символов here(поиск «Unicode свойств символов»))

, очевидно, вы можете обрезать текст, чтобы закончить:

$text = trim($text); 
+1

Из документации [ 'strip_tags'] (https://php.net/strip_tags): * Потому что' strip_tags() 'делает фактически не проверять HTML, частичные или сломанные теги могут привести к удалению большего количества текста/данных, чем ожидалось. * Справедливое предупреждение в случае появления нежелательных результатов. –

+1

@MariM: да, но нет реальных способов предотвратить это, даже с помощью DOMDocument или с помощью регулярного выражения. –

+0

Это сработало - красиво! Спасибо. Мне жаль, что я не смог бы СТРЕЛКИ, но моя репутация - не 15 - как я могу повысить свою репутацию? – Viktor

1

попробовать эту библиотеку, чтобы отфильтровать вещи 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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^