文字セット以外のすべてを削除する場合は、[^a-c]
などの小文字の文字を使用して簡単に行うことができます。a, b, c
以外はすべて一致します。文字列(あなたのsc
のような)の場合、これはもちろん動作しません。
しかし、どの文字を保存したいのか分かっていれば、ゲームを回すことができます。あなたが残しておきたいものを抽出し、残りの部分を無視:
<?php
$text = 'hello <script> |world #/foo';
$allowed = array('<', '>', 'p', 'sc', '|', '#');
array_walk($allowed, function(&$value){
$value = preg_quote($value, '#');
});
$pattern = '#' . join('|', $allowed) . '#iu';
$text = preg_match_all($pattern, $text, $matches);
$text = join('', $matches[0]);
echo $text, "\n";
ボーナス質問:私はUTF-8がaswell動作することを確認するためにmb_ereg_matchを使用する必要がありますか?
PCREは、/u
フラグを使用してUTF-8を実行できます。 mb_ereg_ *は、後者が
foreach ($allowed as &$value) {
$value = preg_quote($value, '#');
};
ある が
array_walk($allowed, function(&$value){
$value = preg_quote($value, '#');
});
ちょうど同様かもしれPCREよりも遅いとUTF-8
ISO-8859-1以外の文字セットを扱うときにのみ使用してくださいおそらく少し速い...
すばらしい答え!これはまさに私が探していたものでしたが、角括弧を作るために少し修正を加える必要がありました。また、ほんの数週間前にボーナスの質問に対するあなたの答えについての部分を読んで、それがどれほど素早く忘れられるのか疑問に思っています;) – Seralize
'preg_quote'を' array_walk($ allowed、 'preg_quote') ' 'array_walk'は値を最初に、キーは第2のパラメータとして渡しますが、' preg_quote'は第2引数を区切り文字とみなします。 – Gumbo
あなたは完全に@Gumboです。私は例を更新しました。 – rodneyrehm