2017-04-21 4 views
1

アクセントを保持したまま英数字以外の文字をフィルタリングする方法はすでにわかっていますが、どのように句読点や一般的なキーボード文字も保存できますか?%$#& @ * )[]:;/- + _ =。、php regexは英数字のラテン文字、句読点、htmlのみを保持します

また、文字列からすべてのhtmlタグとBR改行を保持する必要があります。これは可能ですか?

$caption = preg_replace('/[^\p{Latin}\d\s\p{P}]/u', '', $caption); 
+0

'<\/?.+?>(* SKIP)(* FAIL)のようなもの| [^ \ pを{ラテン} \ d \ s \ p {P}] 'それはHTML要素であることを実際に検証していません。より正確には、中間に何かを持つ' <' and a '> 'があります。 – chris85

答えて

1

これは動作するはずです。それはすべての特別なキーボードの文字を維持し、すべて htmlタグ
と他の項目をターゲットにしています。

正規表現は、タグと特殊文字にアトミックグループを使用します。
結果は非常に速くなければなりません。

弦楽器と区切り形式'~..~'

'~(?>(?><(?:(?:(?:(script|style|object|embed|applet|noframes|noscript|noembed)(?:\s+(?>"[\S\s]*?"|\'[\S\s]*?\'|(?:(?!/>)[^>])?)+)?\s*>)[\S\s]*?</\1\s*(?=>))|(?:/?[\w:]+\s*/?)|(?:[\w:]+\s+(?:"[\S\s]*?"|\'[\S\s]*?\'|[^>]?)+\s*/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>|[!%$#&@*()\[\]^:;/+_=.,\~-])(*SKIP)(*FAIL))|[^\p{Latin}\d\s\p{P}]~'

生の形式:たぶん

(?>(?><(?:(?:(?:(script|style|object|embed|applet|noframes|n‌​oscript|noembed)(?:\‌​s+(?>"[\S\s]*?"|'[\S‌​\s]*?'|(?:(?!/>)[^>]‌​)?)+)?\s*>)[\S\s]*?<‌​/\1\s*(?=>))|(?:/?[\‌​w:]+\s*/?)|(?:[\w:]+‌​\s+(?:"[\S\s]*?"|'[\‌​S\s]*?'|[^>]?)+\s*/?‌​)|\?[\S\s]*?\?|(?:!(‌​?:(?:DOCTYPE[\S\s]*?‌​)|(?:\[CDATA\[[\S\s]‌​*?\]\])|(?:--[\S\s]*‌​?--)|(?:ATTLIST[\S\s‌​]*?)|(?:ENTITY[\S\s]‌​*?)|(?:ELEMENT[\S\s]‌​*?))))>|[!%$#&@*()\[‌​\]^:;/+_=.,~-])(*SKI‌​P)(*FAIL))|[^\p{Lati‌​n}\d\s\p{P}]