2011-08-05 25 views
14

Zastrzeżeniefilter_var vs htmlentities vs htmlspecialchars

To nie jest pytanie o to, czy powinniśmy być ucieczki dla wejścia do bazy danych. Jest to ściśle patrząc na techniczne różnice między trzema funkcjami w tytule.

Jest this question Omawiając różnicę między htmlentities() i htmlspecialchars(). Ale tak naprawdę nie dyskutuje się o filter_var(), a informacje znalezione w Google były bardziej zbliżone do "Upewnij się, że przed wprowadzeniem echa nie masz dostępu do danych użytkownika".

Moje pytania są następujące:

  • Dlaczego htmlspecialchars() i htmlentities() powszechnie stosowane przez filter_var()?
  • Czy wydajność spowodowała użycie filter_var()?
  • Czy numer filter_var() jest mniej bezpieczny niż pozostałe dwie opcje?
  • Czy jest jakiś inny powód, aby nie używać następujących do kodowania danych wprowadzonych przez użytkownika, zanim będzie echod

filter_var($var, FILTER_SANITIZE_FULL_SPECIAL_CHARS);

+1

'htmlentities' /' htmlspecialchars' pozwala zapobiegać podwójnemu kodowaniu encji, ustawiając 4. parametr na "false". Nie wiem, czy można to osiągnąć przez 'filter_var'. – ryanve

Odpowiedz

7

Domyślam (o braku przyjęcia) byłoby to po prostu dlatego, że rozszerzenie filtra jest aktywna tylko domyślnie od wersji 5.2, natomiast metody html * są już dłuższe.

+0

Pomyślałem, że to będzie coś takiego z powodu braku adopcji. Ale dlaczego wewnętrzny zespół PHP odczuł potrzebę stworzenia 'filter_var', jeśli nie ma czegoś złego w metodach' html * '? – cspray

+0

Ponieważ filter_var ma o wiele więcej niż tylko ucieczkę HTML. – Stephen

+0

Ok, to dlaczego potrzeba dodać tę konkretną funkcjonalność do 'filter_var()'? – cspray