Почему "htmlspecialchars" так медленно? - программирование

Почему "htmlspecialchars" так медленно?

htmlspecialchars($string, ENT_NOQUOTES); 

... примерно в 2,5 раза медленнее, чем:

str_replace(array('&', '<', '>'), array('&amp;', '&lt;', '&gt;'), $string);

Делает htmlspecialchars что-то, что str_replace нет?

p.s. Я измерил скорость в PHP 5.4, используя microtime.

4b9b3361

Ответ 1

str_replace() обрабатывает строки как ASCII C-строки. htmlspecialchars() нет. (Это строки UTF8 по умолчанию в php 5.4, если память служит.)

Кроме того, существует код в htmlspecialchars(), чтобы избежать двойного кодирования и т.д. Он делает больше вещей.

Ответ 2

Посмотрите документацию.

Причина, по которой она медленнее, заключается в том, что она делает больше. Он обрабатывает различные кавычки, кодировки и двойные кодировки.

Работа с кодировками может быть довольно медленной. Поскольку компьютеры очень быстрые, это не имеет большого значения, но если вы сравните их с простым поиском и заменой (в основном это все str_replace, ) он будет медленнее.

Ответ 3

В документации указано, что htmlspecialchars() имеет параметр, в котором вы можете ввести кодировку, которую хотите использовать, и по умолчанию будет также кодировать все по два раза.