2016-06-29 3 views
1

私は記事機能をサニタイズするようなものを作成しようとしています。私は、HTMLブログサイトに表示されている記事の内容を消去または正規化する関数を意味します。記事サニタイズ時にスペースと改行文字を残してください

\nを除くすべての空白を削除する必要があります。だから改行とスペース。

私は、addcslashes php関数で改行と空白をエンコードするアイディアを始めました。その後、すべての空白を削除します。次に、ストライプラッシュを使用します。次に、複数の\x20オカレンスを1つのオカレンスと置き換えます。したがって、改行文字のようなものになり、正規表現操作のための一時的な休止状態になります。

しかし、出力に入力に存在する改行文字がないため、成功しませんでした。

オンラインバージョンは動作しませんhttps://ideone.com/I4oZCJ

マイコード:

<?php 
    $text = 'first line 
second line'; 
    $text = addcslashes($text, "\x20\t"); 
    $text = preg_replace('/\s+/', ' ', $text); 
    $text = stripslashes($text); 
    $text = preg_replace('/\s+/', ' ', $text); 
    var_dump($text); 

それを得るためにどのように?また

preg_replace('/\h+/', ' ', $text'); 

Demo

、あなたはすべての文字にあなたを除いて、あなた自身の文字クラスを作成することができます。

はあなたが\hクラスを使用して、水平空白文字を置き換えることができます

答えて

1

ありがとうしない置き換えたい:

preg_replace('/[^\S\n]+/', ' ', $text); 

基本的に、これは\S(空白ではない)であり、\n(改行文字なし)でないすべてのカッターに一致します。どちらも動作します。

+0

私はこれらのパターンを使用していました。 CR空白は '\ r'を意味し、スペースで置き換えられました。削除されているはずです。あなたはそれをオンラインで見ることができます:https://ideone.com/ebP1Q4 – trzczy

+0

@trzczy 'str_replace(" \ r "、 ''、$ text)'を最初に呼び出し、削除したい文字を次のように素早く簡単に削除します。可能であれば –

+0

"\ r"は無視する唯一の垂直空白ではありません。フィルタは、 "スペースと\ nを除いてそれぞれ\ s"でなければなりません。調べることは、記事の目に見えない文字を正規化して、strlenが見える文字を数えさせることです。 – trzczy

0

https://ideone.com/hJrH8R

<?php 
function clean($text) { 
    $text = preg_replace('/[\cK\f\r\x85]+/', '', $text); 
    $text = preg_replace('/\h+/', ' ', $text); 
    return $text; 
} 
関連する問題