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;
}

一个人建议用一个衬里替换整个脚本:

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

但这会导致 $_GET 命令出错 - 未知变量 ID

我正在寻找的是删除所有 HTML 代码和奇怪字符的最简单脚本,用空格替换回车并留下点逗号和感叹号等标点符号。

有很多类似的问题,但似乎没有一个能真正正确地回答这个问题,并且这些脚本会删除所有字符,包括句子标点符号和外国阿拉伯字体或西班牙语。

例如,如果字符串包含 www.mygreatwebsite.com

更干净的脚本将返回看起来很奇怪的 wwwmygreatwebsitecom。

如果有人对‘嘿,这是一个很棒的网站!' 它还删除了感叹号。

我查找的所有类似问题都删除了所有字符....

我想用一个简单的正则表达式命令留下标点符号和任何外语字符,清除人们粘贴到表单中的所有内容,但留下标点符号。

自然回车会被空格代替。

有什么建议么?

4

2 回答 2

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);

where\pP是用于标点符号、\pL字母、\pN数字的字符类。(要更准确地了解您要保留的字符,请查看此处的可用字符类 (搜索“Unicode 字符属性”)

显然,您可以修剪文本以完成:

$text = trim($text);
于 2015-05-11T16:03:00.203 回答
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);
}
于 2015-05-11T16:08:34.570 回答