2013-05-05 24 views
13
htmlspecialchars($string, ENT_NOQUOTES); 

...比べて約2.5倍遅い:なぜ "htmlspecialchars"が遅いのですか?

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

htmlspecialcharsstr_replaceラインにはない何かをしていますか?

p.s.私はmicrotimeを使ってPHP 5.4で速度を測定しました。

+3

@Juampi ENT_NOQUOTESが意味するものを刺してください... –

+5

ここにソースhttps://github.com/php/php-src/blob/master/ext/standard/html.cがあります。あなたの固定str_replaceリストの代わりに、異なる置換セットを使用して、あらかじめcharsetを設定しておいてください。 – mario

+1

また、 'str_replace'よりも' strtr'を使うほうがいいです。しかしそれは単なるコメントです。 – hakre

答えて

12

str_replace()は、文字列をASCII C文字列として扱います。 htmlspecialchars()はありません。 (メモリが使えば、デフォルトでは5.4のUTF8文字列になります)

また、ダブルエンコーディングなどを避けるためにhtmlspecialchars()にコードがあります。

+0

あなたは ' htmlspecialchars'を 'str_replace'に追加しましたか? –

+0

二重エンコーディングの問題のほかに、おそらく 'str_replace()'が無効なUTF8文字列をうまく受け入れる場合がありますが、 'htmlspecialchars()'はおそらくそうではありません。その日に 'mysql_real_escape_string()'が導入されたのを思い出してください。なぜなら、あなたがエンコーディングを心配していないときにSQLインジェクションの可能性があるからです。 –

0

htmlspecialchars()には、使用する文字セットを入力できるパラメータがあり、デフォルトでは2回もすべてエンコードされることが記載されています。

2

documentationをご覧ください。

もっと遅くなる理由はもっとありますから。これは、さまざまな引用符、エンコーディングと二重エンコーディングを処理します。

エンコーディングを使用する作業は非常に遅くなる可能性があります。コンピュータは非常に高速ですので、それほど問題にはなりませんが、単純な検索と置き換え(これは基本的にはすべてstr_replaceです)と比較すると、速度が遅くなります。

関連する問題