2011-09-13 15 views
0

私は特殊な文字のいくつかのジャンクアップデータをクリーニングしようとしていますが、いくつかはまだ通過します。以前は正規表現スニペットが見つかりましたが、アスタリスクのような文字は削除されません。Regexがデータ内の文字を置き換えます。

$clean_body = $raw_text; 

    $clean_title = preg_replace("/[^!&\/A-Za-z0-9_ ]/","", $clean_body); 
    $clean_title = substr($clean_title, 0, 64); 

    $clean_body = nl2br($clean_body); 

    if ($nid) { 
    $node = node_load($nid); 
    unset($node->field_category); 
    } else { 
    $node = new stdClass(); 
    $node->type = 'article'; 
    node_object_prepare($node); 
    } 

    $split_title = str_split($clean_title); 

    foreach ($split_title as $key => $character) { 
    if ($key > 15) { 
     if ($character == ' ' && !preg_match("/[^!&\/,.-]/", $split_title[$key - 1])) { 
     $node->title = html_entity_decode(substr(strip_tags($clean_title), 0, $key - 1)) . '...'; 
     } 
    } 
    } 

最初の部分は、通常の句読点や英数字でない生のテキストで、何を一掃しようとします。次に、タイトルを配列に分割してスペースを探します。私がしたいのは、少なくとも15文字の長さのタイトルを作成し、句読点に止まらずにスペースを切り詰める(単語全体をそのまま残す)ことです。これは私が問題を抱えている部分です。

いくつかのタイトルがまだ最初のタイトルも*年代を持つべきではない、とセクションは、例えば、HOW TO MAKE...あるべきとき、*****************または** HOW TO MAKE $$$$$$ BLOGGING **として出てきます。

+0

文字列の切り詰めにワードラップを使用することはどうですか? – Lekensteyn

+0

私はタイトルに改行を追加したくないだけで、それを切り捨てます。それは機能がそれを打破するように聞こえる? – Kevin

+0

あなたの正規表現は私にはうまく見えます。 'preg_replace'を呼び出した直後に' $ clean_title'を調べてみましたか?私は問題があなたのPHPにあると思うが、私はかなりの時間でPHPを使用していないので、私は専門家ではない。 –

答えて

0

"/[^!&\/\w\s]/ui"?私のマシンで 作品罰金

0

あなたの問題(または、とにかくそのうちの一つ)は、このロジックです:

if ($key > 15) { 
    if ($character == ' ' && !preg_match("/[^!&\/,.-]/", $split_title[$key - 1])) { 
    $node->title = html_entity_decode(substr(strip_tags($clean_title), 0, $key - 1)) . '...'; 
    } 
} 

$split_title配列内の文字を反復する場合にのみ、これらの条件が一致した場合に$node->titleを設定しています。

一致しないとどうなりますか? $node->titleは設定されません(または上書きされますか?あなたはあまりコンテキストを与えていないので、わかりません)。

テストとしてこれを使用する:

$clean_body = '** HOW TO MAKE $$$$$$ BLOGGING **'; 

あなたはこれらの条件が一致していないことがわかりますので、$node->titleが設定(または上書き)されません。

関連する問題