配列に許容される文字を定義しようとしていて、この配列に基づいて文字列をサニタイズしようとしています。以下のコードは、0〜9の文字も削除している点を除いては、かなりうまく機能します。PHP - サニタイズ文字列で数値が削除される
誰かがなぜこれを説明できますか?
コード:
<?php
//Allowed characters within user data:
$symbols = array();
$symbols += range('a', 'z');
$symbols += range('A', 'Z');
$symbols += range('0', '9');
array_push($symbols,' ','-'); // Allow spaces and hyphens.
//----test 1
//data to test.
$someString = "07mm04dd1776yyyy";
//sanatize
$someString = trim(preg_replace("/[^" . preg_quote(implode('',$symbols), '/') . "]/i", "", $someString));
echo "$someString\n";
//----test 2
$someString = "Another-07/04/[email protected]#$%^&*()[]\\;',./\"[]|;\"<>?";
//sanatize
$someString = trim(preg_replace("/[^" . preg_quote(implode('',$symbols), '/') . "]/i", "", $someString));
echo "$someString\n";
?>
出力:
mmddyyyy
Another--test-
追記(編集):これは、データベースと連動して使用されているが、それはDBを超えて、DB内のデータを使用していますユーザーをActive Directoryにインポートするpowershellスクリプトを作成し、多くの文字は許可されず、古いシステムでもこれらの文字のみが許可されます。
は@andrewsiが許さ文字が配列に追加されていないと、私はそれらを適切に追加する方法を考え出したもののオフに行く、事前に ウェイン
追記:これは万が一のデータベースとは何かを持っていますか?もしそうなら、あなたはそのすべてを必要としません。準備されたステートメントを使用することができます。 –
これはDBを超えていますが、DB内のデータを使用してユーザーをActive Directoryにインポートするpowershellスクリプトを作成し、多くの文字は許可されず、古いシステムでもこれらの文字のみが許可されます。 –
私はあなたの質問にあなたが気に入らなければあなたのコメントを編集として追加しました。それは可能な答えの結果に関係するかもしれない。 –