2021-11-18に投稿

var_dump() の中身を文字列として処理したい

経緯

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() で処理して出力する、と。

これで問題を解決しました。

参考

Originally published at labor.ewigleere.net
ツイッターでシェア
みんなに共有、忘れないようにメモ

arm-band

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント