そんなにGeekじゃないエンジニアブログ

fuelPHPでViewにJsonデータなどのダブルクォーテーション文字を渡してもエスケープしないようにする

calendar

こんにちは。でんすけ(@notgeek_densuke)です。

fuelPHPを使っていて、JsonデータをViewに渡したいときって、ありますよね。

そんな時にハマったこととか。

スポンサーリンク

fuelPHPでは、Viewに渡す時にエスケープされる

Jsonデータを適当に作って、Viewに渡す PHP側のコードはこんな感じ。

$jsondata_arr = [];
$jsondata_arr['@context'] = "http://schema.org/";
$jsondata_arr['@type'] = "JobPosting";

$jsondata_arr['description'] = "内容";

$jsondata = json_encode($data,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);

$view->jsondata = $jsondata;

この時のエスケープの話はこちらの記事でもかきました。

JsonデータをPHPで作成した時のエスケープする、エスケープしないの選択処理の話

で、View側はこんな感じ。

<head>
    <script type="application/ld+json">
        {{jsondata|raw}}
    </script>
</head>

すると、実行結果がこんな感じになります。

<head>
    <script type="application/ld+json">
        {
            &quot;@context&quot;,
            &quot;http://schema.org/&quot;,
            &quot;description&quot;: &quot;内容&quot;
        }
    </script>
</head>

めっちゃ&quotって言われる!

fuelPHPでViewに文字列渡すと「”」がエスケープされるのです。
つらい。

set_safeを使う

そんな時は、Viewのset_safe()をつかうべし。

$view->set_safe('jsondata', $jsondata);

すると

<head>
    <script type="application/ld+json">
        {
	    "@context": "http://schema.org/",
	    "@type": "JobPosting",
	    "description": "内容"
        }
    </script>
</head>

てな感じです。

細かいTips的な話ですが、地味にハマったので書き残しておきます。

たまには公式のドキュメントもちゃんと見るべきですね。

それではまたー。

この記事をシェアする

コメント

コメントはありません。

down コメントを残す




CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください