2016-09-16 2 views
-1

私はいくつかの "遺産"のコードを調べていて、私があまり理解していないものを見つけました。ここでは、コードは次のとおりです。奇妙なPHPエンコーディングコード。何らかの理由?

$name = $_POST['name']; 
$name = htmlspecialchars_decode($name); 
$name = addslashes($name); 
$name = htmlentities($name, ENT_NOQUOTES, 'UTF-8'); 
$name = html_entity_decode($name); 

InsertIntoDatabase($name); //SQL server 

私は個別にすべての単一の行を理解しますが、私の質問は:

なぜプログラマはすべてのことをしましたか?

まず、このコードはすべて役に立たないようです。 htmlentitieshtml_entity_decodeはお互いを無効にします。htmlspecialchars_decodeは役に立ちません。は'の前に\を実際に追加してデータベースにゴミを挿入します。

私はそれをすべて削除するように感じますが、以前の開発者はコードベースのどこにでもその構造を追加するという手間にかかっていました。彼は正当な理由があったに違いない。右?

私たちは(まだ)PHP 5.3を使用しています。なぜ彼はすべてのことをしたのか?

+0

私が推測できるのは、エスケープ文字として\を追加しなければならない他の言語との互換性が欲しいということだけです。 – namlik

+1

コンテキストなしプログラマが何を考えているのか分からない。これが本当に変数をクリーンアップしてデータベースに入れることができるのであれば、それはちょうどゴミです。しかし、もしあなたがこれを削除する必要があれば、あなたのデータベースを通過し、すべてを逆にする必要があります。たぶんそれは人々がそれを修正するために時間とエネルギーを費やしたくないので一人で放置されたのかもしれません。 – apokryfos

答えて

1

これは

あなたはしかし、それでもスラッシュを追加すると、古い方法だったので、これらの値が保存され、データベースで使用されているか確認する必要がありますが、HTMLの文字を削除したい場合にのみhtmlentitiesまたはhtmlspecialcharsが便利ここになり、本当にやり過ぎですエスケープ文字を指定する

+0

変わった部分は、彼がhtmlspecialcharsではなくhtmlspecialchars_decodeで始まったことです。 – Gudradain

+0

さて、あなたが提供した多くの背景を理由に説明することはできません – rak007

関連する問題