LoginSignup
5
5

More than 5 years have passed since last update.

FuelPHPのViewでHTMLタグが表示されてしまう問題

Last updated at Posted at 2017-01-31

はじめに

バイトで長い時間苦しんだ部分についてメモを残していきたいと思います。

ControllerからViewに値を渡す

基本的にControllerからViewに値を渡す場合Viewクラスのforge()メソッドを利用する

Controller.php
public function action_index() {
    return Response::forge(View::forge('第一引数', '第二引数', '第三引数'));
}

forge()メソッド

forge()メソッドはオブジェクトを生成するメソッド

Viewクラスのforge()メソッド

Viewオブジェクトを返すメソッド

Controller.php
View::forge($file, $data, $filter)

// $file = ビューファイル名を受け取る。app/viewsからの相対パス (ex: View/View.php)
// $data = Viewに渡したい値の配列 (ex: {'hoge' => $hoge})
// $filter = 自動エンコーディングを行うかを決める (デフォルトはtrueでエンコーディングを行う)

Responseクラスのforge()メソッド

Responseクラスの新しいインスタンスを生成する
HTTPレスポンスとブラウザ出力を扱うメソッドを持つ

Controller.php
Response::forge($body, $status, $header)

// $body = レスポンス本文。ユーザーに返したいレスポンス
// $status = HTTPステータスコード
// $header = レスポンスになりうる、あらゆる HTTP ヘッダ

ViewでHTMLのタグが表示されてしまう理由

View::forge()の第三引数を省略するとtrueになり、デフォルトでエスケープを行ってしまう
よって、DBなどに入っているHTMLタグが入った文字列をエスケープした状態でViewに渡してしまい、HTMLタグが表示されてしまう
解決策としては以下の2つある

第三引数をfalseにする

falseにすることにより$dataにエスケープ処理を与えずにViewに渡すことができる

Controller.php
View::forge('/View/View.php', {'hoge' => 'Hello World!<br>'}, false)

set_safe()メソッドを利用する

ビューに変数を割り当てるメソッド
変数に値を入れる際にエンコーディングを行わない

Controller.php
View::forge()->set_safe('hoge', 'テスト');
View.smarty
{$hoge}
  ↓  出力
テスト
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5