PHP - virgülle ayrılmış dize Dezenfekte

3 Cevap php

Örneğin - Ne numaraları tamamen yapılmış bir virgülle ayrılmış dize olan bir kullanıcı girişi temizlemek için en etkili yol olacaktır

2,40,23,11,55

Benim girişleri çok üzerinde bu işlevi kullanın

function clean($input){ $input=mysql_real_escape_string(htmlentities($input,ENT_QUOTES)); return $input; }

Ve basit tamsayılar yapmam:

if (!filter_var($_POST['var'], FILTER_VALIDATE_INT)) {echo('error - bla bla'); exit;}

Her şeyi kontrol o yüzden ben o patlayacak gerekir ve daha sonra yukarıdaki kod ile dizinin her elemanı kontrol etmek veya belki bütün tekrarlarını değiştirmek ',''' ve bir sayıdır? Siz ne düşünüyorsunuz?

3 Cevap

if (ctype_digit(str_replace(",", "", $input))) {
  //all ok. very strict. input can only contain numbers and commas. not even spaces
} else {
  //not ok
}

Bu CSV ve orada basamak veya virgül çevresinde boşluk olabilir ve olabilir eğer belki hatta bazı tırnak işaretleri daha iyi maçlar olmadığını kontrol etmek için bir regex kullanıyorsanız

Eğer doğru oluşmuş değilse sadece onu reddeden bir virgülle ayrılmış bir liste yerine dönüştürmek istiyorsanız, array_map() bunu ve bir açık döngü yazma önlemek olabilir.

$sanitized_input = implode(",", array_map("intval", explode(",", $input)));

Ben tembel değilim neden sadece ', sanırım ama ben, bunun yerine basit giriş denetimi hata filtre olur ve genellikle bir web bağlamda ben beklemek olmaz ki geliyor ne olabilir işlemek için yol çok vaka var: Basit Aşağıdaki filtre.

<?php
$input = '234kljsalkdfj234a,a, asldkfja 345345sd,f jasld,f234l2342323@#$@#';
function clean($dirty){ // Essentially allows numbers and commas, just strips everything else.
    return preg_replace('/[^0-9,]/', "", (string) $dirty);
}

$clean = clean($input);

echo $clean;
// Result: 234234,,345345,,2342342323
// Note how it doesn't deal with adjacent filtered-to-empty commas, though you could handle those in the explode.  *shrugs*

>

İşte kod takımı üzerinde kod ve çıkış bulunuyor:

http://codepad.org/YfSenm9k