PHP / MySQL - 表单输入值“&”保存为“&”

时间:2017-10-19 09:44:56

标签: php html mysql codeigniter utf-8

我使用CodeIgniter,我有一个带有一些输入字段的公式。问题是,当我在输入字段中写入特殊字符时,例如“&”它将保存为&,当我重新加载表单以编辑值时,它会像这样显示。 这导致许多错误并且需要解决。该值需要保存为“&”。

我使用form_validation作为输入字段:

$this->form_validation->set_rules("input1", "Name", "required|trim");
$this->form_validation->set_rules("input2", "Name", "required|trim");

稍后,我将所有输入写入数组并将其交给模型中的函数:

$input= array();
$input["input1"] = set_value("input1");
$input["input2"] = set_value("input2");
$this->MInput->update_input($input_id, $input);

该模型如下所示:

function update_input($input_id, $input) {
    if($this->db->update("pa_it_input", $input, "id = $input_id") === FALSE) {
        $error = $this->db->error();
        log_message("error", "Database error in MInput [".$error["code"]."] ".$error["message"]);
        return FALSE;
    }

我不知道导致错误的原因。我已经检查过所有表都设置为UTF-8,并且页面加载为UTF-8。

2 个答案:

答案 0 :(得分:0)

这涉及PHP吗?什么版本的PHP?它是否有"魔术引号"打开了?

是否有任何代码正在调用htmlentities()

& - > &是一个" HTML实体"问题,而不是" UTF-8"问题。

CodeIgniter带来什么?也许这样一些无端的变化?假设传入的形式的唯一用途是错误的。文本是用HTML表示的。在你的情况下它进入MySQL,它需要一个不同的转义机制。

答案 1 :(得分:0)

Codeigniter将特殊字符转换为html实体。为此,存在一些安全问题。要解决您的问题,php的htmlspecialchars_decode()函数将有所帮助。

如果您保存在数据库中的公式具有&,则在将内容传递给模型之前先对其进行解码。

$input= array();
$input["input1"] = htmlspecialchars_decode(set_value("input1"));
$input["input2"] = htmlspecialchars_decode(set_value("input2"));
$this->MInput->update_input($input_id, $input);

这将保存“&”而不是'&',但是如果您的数据库包含正确的内容“&”,并且只是在编辑表单中未正确显示“&”。然后,您需要在设置输入值的HTML页面上使用htmlspecialchars_decode()函数。

<input type="text" name="input1" value="<?php echo htmlspecialchars_decode($formula_val); ?>" />