格式化HTML输入字段的MySQL查询


Formatting MySQL query for HTML input field

我在格式化要进入HTML输入字段的数据字符串时遇到问题。这是我的问题:

$sql_active = "SELECT * FROM table WHERE id='$id'";
$result_active = $mysqli->query($sql_active);
$row = mysqli_fetch_array($result_active);
$job_description = stripslashes($row['job_description']);

然后我使用$jobdescription变量在页面上显示信息。在页面的后面,我有一个隐藏的表单字段,我也需要把信息放进去。所以我这样做:

<input type="hidden" name="description" value="<?php echo $mysqli->real_escape_string($job_description); ?>" />

问题是,当用户第一次输入描述字段时,他们可以使用引号、双引号等(无论他们喜欢什么)。在我这里的一个例子中,它不允许信息越过引号。它显示如下:

<input type="hidden" name="description" value="PLEASE NOTE: YOU MUST HAVE EXPERIENCE'r'n'r'nOne of the city''s best employers. Basic '" handyman'" repair skills preferred. ">

当它碰到第一个撇号时,它会转义它,但由于用户同时使用了撇号和引号,它会感到困惑。

你完全误解了逃跑的目的。这些函数是特定于目的的,当您输出到HTML上下文中时,执行SQL转义序列是毫无意义的,因为HTML不使用SQL样式的转义,SQL也不使用HTML样式的转义。你已经为手头的工作使用了合适的工具。由于您使用的是HTML,因此需要使用htmlspecialchar(),例如

<input ... value="<?php echo htmlspecialchars($job_description) ?>" />
                             ^^^^^^^^^^^^^^^^

只有在提交表单并且在sql上下文中使用提交的数据时,才可以使用sql转义。