経緯
var_dump()
の出力結果がHTMLを含む文字列のオブジェクトだと仮定します。
そのまま出力されると、当然オブジェクトの中に含まれるHTMLタグがブラウザに認識されてレンダリングされてしまいます。
これでは、元々あったタグや構造とバッティングして表示が崩れてしまう上に、肝心の値の中身を文字列として確認することができません。
……かといって中身がオブジェクトなので htmlspecialchars()
もそのままではかけられないですし、オブジェクトの他の値も参照したいので「オブジェクトをループ→全ての項目を出力しつつHTMLが含まれている値のみ htmlspecialchars()
で処理する」ということも難しい。
これにどう対処するか、というお話です。
結果
最終的に「一時的にバッファに保存し、文字列となったところで htmlspecialchars()
で処理して出力する」という方法に辿り着きました。
サンプルコードとしては以下のような形。
<pre>
<code>
<?php
ob_start();
var_dump($sample_obj);
var_dump($sample_str);
$result = ob_get_clean();
echo htmlspecialchars($result, ENT_QUOTES, 'UTF-8');
?>
</code>
</pre>
pre
, code
タグ で囲みつつ、 var_dump()
の中身を一度バッファに保存するように ob_start()
でバッファリングを開始。
var_dump()
で変数を出力(実際にはバッファに保存)し、一通り出力したい内容をバッファに保存したら ob_get_clean()
でバッファを削除しつつバッファの中身を変数に。
残された変数を htmlspecialchars()
で処理して出力する、と。
これで問題を解決しました。