htmlspecialchars($string, ENT_NOQUOTES);
...慢於約2.5倍:爲什麼「htmlspecialchars」這麼慢?
str_replace(array('&', '<', '>'), array('&', '<', '>'), $string);
是否htmlspecialchars
做一些事情,在str_replace
行不?
p.s.我使用microtime
在PHP 5.4中測量速度。
htmlspecialchars($string, ENT_NOQUOTES);
...慢於約2.5倍:爲什麼「htmlspecialchars」這麼慢?
str_replace(array('&', '<', '>'), array('&', '<', '>'), $string);
是否htmlspecialchars
做一些事情,在str_replace
行不?
p.s.我使用microtime
在PHP 5.4中測量速度。
str_replace()
將字符串視爲ASCII C字符串。 htmlspecialchars()
沒有。 (如果是內存服務,它的默認值是UTF8字符串。)
此外,htmlspecialchars()
中有代碼以避免雙重編碼等等。它可以做更多的事情。
您可以舉一個例子,說明使用' htmlspecialchars'超過'str_replace'? – 2013-05-05 12:48:42
除了雙重編碼的問題,大概是'str_replace()'會高興地接受無效的UTF8字符串,而'htmlspecialchars()'可能不會。回想一下爲什麼'mysql_real_escape_string()'在當天被引入:由於當您不擔心編碼時可能發生sql注入。 – 2013-05-05 12:54:15
該文檔指出htmlspecialchars()
有一個參數,您可以在其中輸入您希望使用的字符集,並且默認情況下它還會將所有內容都編碼兩次。
它慢的原因是因爲它做得更多。它處理各種引號,編碼和雙重編碼。
使用編碼可能會很慢。因爲計算機速度非常快,所以不應該太重要,但如果將其與簡單的搜索和替換進行比較(基本上都是str_replace
),速度會變慢。
@Juampi刺戳ENT_NOQUOTES是什麼意思... – 2013-05-05 12:31:46
這是源代碼https://github.com/php/php-src/blob/master/ext/standard/html.c它有額外的工作與考慮預先使用字符集,使用不同的替換集而不是固定的str_replace列表等。 – mario 2013-05-05 12:32:40
還可以更好地使用'strtr'而不是'str_replace'。但這只是一條評論。 – hakre 2013-05-05 13:45:29