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