有没有办法应用htmlspecialchars()或html_escape()整个PHP / Codeigniter基础网站?

时间:2017-12-05 10:05:47

标签: php codeigniter htmlspecialchars

我已经构建了一个基于Codeigniter的系统。

编辑屏幕时,我从数据库中获取值并显示在输入字段上。

示例:

   <input type="text" class="form-control" required="" name="tes_title" value="<?php echo htmlspecialchars($tes_info['tes_title']); ?>">

所以我不得不使用htmlspecialchars因为某些值包含双引号和单引号。但是手动将它们添加到所有输入会花费大量时间。

有没有办法明智地应用htmlspecialchars()html_escape()整个网站?

我的意思是即使我使用<input type="text" class="form-control" required="" name="tes_title" value="<?php echo $tes_info['tes_title']; ?>">它也应该用作<input type="text" class="form-control" required="" name="tes_title" value="<?php echo htmlspecialchars($tes_info['tes_title']); ?>">

2 个答案:

答案 0 :(得分:0)

编写便利功能。

<?php

function e($str) {
    //return escaped string.
}

并在需要时使用输出:

<?= e($foo) ?>

但是我将它限制在输入输出中。逃离需要的地方并妥善逃脱。

Codeigniter看起来有一个html_escape辅助函数,它是htmlspecialchars的包装器。它还需要一个数组作为输入。

您可以在传递给视图(在控制器中)之前预处理数据。但它可能变得令人困惑和笨拙 - 你可能不想逃避你传递给视图的一切。

$data = array(
        'title' => 'My Title',
        'heading' => 'My Heading',
        'message' => 'My Message'
);

$escaped = html_escape($data);

$this->load->view('blogview', $escaped);

答案 1 :(得分:0)

您可以为每次提交定义挂钩。

编辑您的application / config / hooks.php文件

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

$hook['post_controller_constructor'][] = array(                                 'class'    => 'SpecialChar', 
'function' => 'remove_specials',
'filename' => 'removespecial.php', 
'filepath' => 'hooks'  
);

在您的功能中,您必须检查表单是否已提交

前:

if ($this->input->post()) {    
     foreach($this->input->post() as $post)
     $newValue = htmlspecialchars($post);
}