1

非常に大量のシリアル化されたデータを含む非表示のフィールドがあります (データベースから約 1300 レコードについて話しています)。このすべてのデータを使用すると、非表示のフィールドがシリアル化されたデータを含むテキスト ボックスとして表示されます。一方、このデータを 200 レコードに制限すると、フィールドは非表示のままになります。Chrome の「inspect 要素」でこの問題を調査したところ、ページ全体の HTML 文字の多くがすべてずれていることがわかりました。

例えば:

class="cont_buffer" turned into class="”cont_buffer”"

余分な引用符が input type="hidden" を台無しにして、フィールドを表示しています。

この問題を回避するにはどうすればよいですか?

4

1 に答える 1

1

2つのこと:

htmlentities($value, ENT_QUOTES)まず、 HTML属性値として使用するために引用符が適切にエンコードされていることを確認するために、非表示の入力の値をhtmlエンコードする必要があるようです。

ただし、ブラウザからサーバーに返されるように、何千ものレコードをブラウザに返すよりも、おそらく実行しているより良い方法があります。非表示の入力に渡す代わりに、行を一時的に に格納する方がよいでしょう$_SESSION。場合によっては、フォーム ポストが受信されたときに、ブラウザーにそれらを返させるよりも、それだけの数の行を再クエリする方が高速な場合もあります。

を使用して PHP で行をシリアライズしている場合は、PHP で行をシリアライズserialize()するつもりだと思いますunserialize()。これを行うと、ブラウザが悪意のあるデータを送り返し、シリアル化を解除してアプリケーションに有害なものになる可能性があるため、細心の注意を払ってください。シリアル化されたデータをブラウザから に送信する必要がunserialize()ある場合は、受信したオブジェクトまたは配列を必ず検証してください。必要なすべてのキーまたはプロパティが含まれていることを確認してください。また、反復時に問題が発生しないように、必要なものだけが含まれていることを確認してください。その上。

于 2012-09-22T18:33:57.173 に答える