Php CodeIgniter中的HTML编码

Php CodeIgniter中的HTML编码,php,codeigniter,Php,Codeigniter,我对Codeigniter中输入库中的html编码有问题 我有一个表单用于编辑我项目管理端的新闻。以下是新闻标题的HTML代码: 回显表单输入($title'),($title)?$title:$this->input->post($title'); 加载编辑页面时,我将获取新闻标题并将其分配给$title。编辑后,如果出现任何验证错误,表单将再次显示,并在标题文件中显示发布的值。上面的代码就是在考虑到这一点的情况下编写的 现在谈到这个问题,假设管理员输入标题为XYZ的调查报告,然后提交。然

我对Codeigniter中输入库中的html编码有问题

我有一个表单用于编辑我项目管理端的新闻。以下是新闻标题的HTML代码:

回显表单输入($title'),($title)?$title:$this->input->post($title');

加载编辑页面时,我将获取新闻标题并将其分配给$title。编辑后,如果出现任何验证错误,表单将再次显示,并在标题文件中显示发布的值。上面的代码就是在考虑到这一点的情况下编写的

现在谈到这个问题,假设管理员输入标题为XYZ的调查报告,然后提交。然后,如果其他字段出现验证错误,则在加载表单时,标题字段将显示

XYZ';s调查报告

我认为在输入类中,发布值是html编码的。因此,我的要求是,如果出现验证错误,我必须在将值显示在表单中之前对其进行html解码

echo form_input('title',($title) ? $title : html_entity_decode($this->input->post('title'),ENT_QUOTES));

它是有效的。但是这个项目很大,有很多表单字段。如果知道这是实现这一点的唯一方法,我会很失望。

如果全局启用XSS筛选,输入类将自动编码。检查应用程序/config/config.php文件,确保其已关闭:

$config['global_xss_filtering'] = FALSE;

XSS筛选不会影响显示的输入字段值

我看到两种选择:

1) 您可以手动创建输入元素:

我认为这是因为
set_value()
函数(如果您在将数据插入数据库时使用该函数)

输入类不会自动进行任何编码,除非您自己进行编码。我刚试过。你能告诉我你是如何处理$\u post/$this->input->post()的吗?你说得对,索普。我也检查过了。当我们一起使用Form_验证和Form_帮助程序时,就会发生这种情况。谢谢。你让我好好测试一下,非常感谢克里斯托弗。我做了一个测试,发现了很多东西:1)输入类并没有像我说的那样改变发布的值。即使您也启用了XSS过滤,也不会发生任何事情。2) 实际上,这是在我通过Form_验证类传递数据时发生的。3) 尽管表单验证对发布的数据进行编码,但您仍然可以通过手动创建您提到的表单元素来获得正确的数据。4) 但是如果您使用的是表单帮助器函数,那么问题就会发生(在通过表单验证类传递发布的数据之后)。谢谢你,朋友。。。
function form_prep($str = '')
{
    // if the field name is an array we do this recursively
    if (is_array($str))
    {
        foreach ($str as $key => $val)
        {
            $str[$key] = form_prep($val);
        }

        return $str;
    }

    if ($str === '')
    {
        return '';
    }

    $temp = '__TEMP_AMPERSANDS__';

    // Replace entities to temporary markers so that 
    // htmlspecialchars won't mess them up
    $str = preg_replace("/&#(\d+);/", "$temp\\1;", $str);
    $str = preg_replace("/&(\w+);/",  "$temp\\1;", $str);

    $str = htmlspecialchars($str);

    // In case htmlspecialchars misses these.
    $str = str_replace(array("'", '"'), array("'", """), $str);

    // Decode the temp markers back to entities
    $str = preg_replace("/$temp(\d+);/","&#\\1;",$str);
    $str = preg_replace("/$temp(\w+);/","&\\1;",$str);

    return $str;
}
// config.php: $config['global_xss_filtering'] = FALSE;
echo form_open("test");
echo form_input('title', ($this->input->post('title')) ? $this->input->post('title') : $title);
echo form_input('title', ($this->input->post('title')) ? $this->input->post('title') : $title, FALSE);
echo form_input('title', ($_POST['title']) ? $_POST['title'] : $title, FALSE);
echo "<input type=\"text\" name=\"title\" value=\"" . (($title) ? $title : $this->input->post('title')) . "\" />";
echo form_submit("btn", "Submit");
echo form_close();

// output:
<form action="/test/" method="post">
<input type="text" name="title" value="XYZ&#39;s survey report"  />
<input type="text" name="title" value="XYZ&#39;s survey report"  />
<input type="text" name="title" value="XYZ&#39;s survey report"  />
<input type="text" name="title" value="XYZ's survey report" />
<input type="submit" name="btn" value="Submit"  />
</form>