Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

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

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}
  ↓  出力
テスト
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした