さまざまなソースから取得したデータの一般的なサニタイザーを確立したいと考えています。サニタイズとは、(この段階で) htmlspecialchars を文字列に適用することを意味します。現在、これらのソースから取得されるデータは、オブジェクトから配列、文字列まで、すべてネストされた (そして複雑な) ものであり、形式は常に少し異なります。
そこで、配列とオブジェクトに適用され、htmlspecialchars を文字列にのみ適用する再帰的な htmlspecialchars 関数を考えましたが、オブジェクトを再帰的に処理するにはどうすればよいでしょうか?
ありがとう。
編集:私はこれについて言及すべきだったと思います-私は実際に、クライアントサーバー通信のためにJSとJSONに大きく依存するRIAを構築しています。サーバーが行う唯一のことは、データベースからデータを取得し、それを次の形式で JSON 経由でクライアントに返すことです。
{"stat":"ok","data":{...}}
前述したように、データは、文字列の形式で DB から取得されるだけでなく、XML から取得されるものでもかまいません。JSON を処理するワークフローは次のとおりです。
- DB/XML からデータを取得します (ソース エンコーディングは iso-8859-1)
それらを「データ」配列に入れます
を使用して iso-8859-1 から utf-8 に再帰的に変換します
private function utf8_encode_deep(&$input) { if (is_string($input)) { $input = $this -> str_encode_utf8($input); } else if (is_array($input)) { foreach ($input as &$value) { $this -> utf8_encode_deep($value); } unset($value); } else if (is_object($input)) { $vars = array_keys(get_object_vars($input)); foreach ($vars as $var) { $this -> utf8_encode_deep($input -> $var); } } }
PHP
json_encode
を使用してデータを JSON に変換するクライアントにデータを送信 (エコー)
JS を使用してデータをレンダリングする (例: テーブルに入れる)
その中間のどこかで、データを何らかの方法でサニタイズする必要があります (この段階では htmlspecialchars のみ)。ここでの質問は次のとおりです。どの方法を使用して、どこをサニタイズしますか?