2011-10-17 1 views
0

私はグーグルで検索したので、すべてのものが、私は答えに来ることはできません。 (それが有効な????をVASよう1234+それは、ユーザーの種類を点灯した場合)

$aValid = array('-', '_', '.'); 

if (ctype_alnum(str_replace($aValid, '', $_POST['Rusername']))){ 

なぜせる以下のPHPコードが通じ署名プラスです。

私は通常、バイパスを見つけましたが、実際には必要です。

$aValid = array('-', '_', '.'); 
if (ctype_alnum(str_replace($aValid, '', (htmlentities (trim ($_POST['Rusername']) , ENT_NOQUOTES))))){ 
    echo "+ ok"; 
}else{ 
    echo "+ not ok"; 
} 

私はこの種の検証を使い、必要なときに$ aValidに特別な文字を追加したいと思います。

MySQLに挿入する前に、mysql_real_escape_stringまたはprepared statementsを実行します。

最初のコードでは+記号がOKである理由はありません。私の意見では、それは本当にすべきではありません。

最新の更新 - 低レベルのデバッグHTTPヘッダーを数時間必要としましたが、私の側でContent-Typeを変更して+記号がスペースになってからPHP if節に移動しました(ホワイトリストに入れました)...

何を - 私はそれはあなたに起こることはありませんことを願っています - 経験:)自分に

注意:それは、この検証プロセスでは、このような主要なプレーヤーだった場合はjQueryの言及されるべきである...

+0

にそれを追加する必要が+記号を削除する場合ロケール文字はちょうど[A-Za-z] .'です。標準Cロケールを使用しないかもしれません。 – ComFreek

+0

本当に、私はUTF-8を使用して別の文字を許可することはしませんでした。明らかに私のエラーがあります。調査します。 ちょうどもう1つ:これで試してみましたが、+記号も有効です。 (preg_match( '/^[a-žA-Ž-_] ++ $ /'、$ _POST ['Rime'])){'code' – BiCi1981

答えて

2

あなたがすべきことは、すべてを単一の行にスラミングするのではなく、プロセスの各段階を調べることです。

$name = $_POST['Rusername']; 
var_dump($name); 
$name = str_replace($aValid, '', $name); 
var_dump($name); 

など...基本的なデバッグ。ステートメントに複数のステージがある場合は、それぞれのステージを確認してください。 ctypeは完全に正常に動作しているかもしれませんが、str_replaceが何とか失敗しています。

+0

ありがとう、私はこれを試してみます私が得るものを見てください。 – BiCi1981

0

+記号が最初のコードで問題ない理由はありません。私の意見では、それは本当にすべきではありません。

は、それは大丈夫ではありません...コードの最初の部分は、falseを返す。..

あなたは、標準Cでは `$aValid変数

+0

申し訳ありませんが、あなたはこの1つでは正しくありません。 $ aValidは許可された文字のため、ctype_alnumを "アップグレード"します – BiCi1981

関連する問題