Почему "htmlspecialchars" так медленно?
htmlspecialchars($string, ENT_NOQUOTES);
... примерно в 2,5 раза медленнее, чем:
str_replace(array('&', '<', '>'), array('&', '<', '>'), $string);
Делает htmlspecialchars
что-то, что str_replace
нет?
p.s. Я измерил скорость в PHP 5.4, используя microtime
.
Ответы
Ответ 1
str_replace()
обрабатывает строки как ASCII C-строки. htmlspecialchars()
нет. (Это строки UTF8 по умолчанию в php 5.4, если память служит.)
Кроме того, существует код в htmlspecialchars()
, чтобы избежать двойного кодирования и т.д. Он делает больше вещей.
Ответ 2
Посмотрите документацию.
Причина, по которой она медленнее, заключается в том, что она делает больше. Он обрабатывает различные кавычки, кодировки и двойные кодировки.
Работа с кодировками может быть довольно медленной. Поскольку компьютеры очень быстрые, это не имеет большого значения, но если вы сравните их с простым поиском и заменой (в основном это все str_replace
, ) он будет медленнее.
Ответ 3
В документации указано, что htmlspecialchars()
имеет параметр, в котором вы можете ввести кодировку, которую хотите использовать, и по умолчанию будет также кодировать все по два раза.