preg_replace do sanityzacji danych

0

Wiem, że istnieją takie funkcje jak:
$x = htmlspecialchars($x);
$x = strip_tags($x);
$x = filter_var($x, FILTER_SANITIZE_STRING);

Ale chciałabym zrobić sobie funkcję pobierającą dane (np z GET, POST) i jako jeden z parametrów móc przekazywać jej regexa z regułami filtrowania, żeby:

  • używać jednej komendy zamiast 2 albo więcej,
  • zachować elastyczność funcji i nie zaćpać jej zbędnymi parametrami.

Pytanie:
Czy preg_replace robiące podobą samą robotę co htmlspecialchars jest jakoś gorsze, mniej bezpieczne albo coś? Czy może to nie ma różnicy, a htmlspecialchars jest po prostu krótsze i prostsze w użyciu?

3

Jak dobrze napiszesz to pewnie tak samo będzie działać. Pytanie czy przewidzisz wszystkie przypadki, które przewidzieli programiści dedykowanych funkcji.
Jest jeszcze aspekt szybkości. Preg_replace nie jest za szybki.

3

Dla skrócenia zapisu można zrobić callbacka, chociaż spowolni on nieco działanie (ale minimalnie), np. filtr usuwający liczby:

$filter = function ($value) {

 $value = preg_replace('/\d/ims', '', $value);
 return $value;

};

$_GET['costam'] = $filter( $_GET['costam'] );

Mozna też pokusić się o zrobienie przez referencję i wtedy:

$filter = function (&$value) {
 $value = preg_replace('/\d/ims', '', $value);
};

$filter( $_GET['costam'] );
1

Wydaje mi się, że o ile nie ma jakiegoś specjalnego zastosowania to nie ma sensu pisanie dedykowanej funkcji. Raz, że te wbudowane mają obsłużonych milion scenariuszy, a dwa to z dużą dozą prawdopodobieństwa są znacznie szybsze i na tym bym się skupił, bo czas = pieniądz. Zrób test prędkości i będziesz wiedziała czy w ogóle jest sens się w o bawić. Jeżeli oczywiście nie masz specjalnej potrzeby, która nie jest obsłużona przez funkcje podstawowe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1