【问题标题】:PHP/MySQL - form input value "&" get saved as "&"PHP/MySQL - 表单输入值“and”被保存为“&”
【发布时间】:2018-03-31 07:48:26
【问题描述】:

我使用 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 加载。

【问题讨论】:

标签: php html mysql codeigniter utf-8


【解决方案1】:

这涉及 PHP 吗?什么版本的PHP?是否开启了“魔法行情”?

有没有代码调用htmlentities()

& -> & 是“HTML 实体”问题,而不是“UTF-8”问题。

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

【讨论】:

    【解决方案2】:

    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); ?>" />
    

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 2014-03-17
      • 2015-09-21
      • 2013-12-30
      • 2015-05-01
      • 2018-06-11
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多