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

ある人は、このスクリプト全体を 1 つのライナーに置き換えることを提案しました。

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

しかし、それは $_GET コマンドでエラーを出します - 不明な変数 ID

私が探しているのは、すべての HTML コードと奇妙な文字を削除し、キャリッジ リターンをスペースに置き換え、ドット カンマや感嘆符などの句読点を残す最も単純なスクリプトです。

似たような質問はたくさんありますが、この質問に正しく答えているものはないようです。これらのスクリプトは、文の句読点や外国のアラビア語のフォントやスペイン語を含むすべての文字を取り除きます。

たとえば、文字列に www.mygreatwebsite.com が含まれている場合

よりクリーンなスクリプトは、奇妙に見える wwwmygreatwebsitecom を返します。

誰かが「ねえ、これは素晴らしいウェブサイトだ! ' 感嘆符も削除します。

私が調べた同様の質問はすべて、すべての文字を削除します....

句読点と外国語の文字は、人々がフォームに貼り付けたすべてのものをクリアする 1 つの単純な正規表現コマンドを使用して IN のままにしたいと思いますが、句読点は残します。

当然、改行はスペースに置き換えられます。

助言がありますか?

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 に答える