【问题标题】:Htmlspecialchars not working to escape apostropheHtmlspecialchars 无法逃避撇号
【发布时间】:2022-09-25 14:51:06
【问题描述】:

为澄清而编辑:表单位于不同的页面 (page1.php) 上,并通过 POST 将信息发送到此页面 (page2.php)。它只是基本的 html 表单。我发现它可以很好地提交给数据库,除非我使用撇号或键入段落,然后按 Enter 在同一个框中键入第二个。

使用撇号会引发错误,说明语法错误。我已经确定它是因为它将输入作为 html 的一部分读取,因此句子中的撇号使它认为我正在结束一行代码。所以我不能使用撇号,就像我刚才在那个词(撇号)中所做的那样。至于段落问题,它根本不会将其保存到数据库中。它一起运行一切。我试图用 htmlspecialchars 转义撇号,如下面的代码所示,但它不起作用。我在这里做错了什么?

if ($_SERVER[\"REQUEST_METHOD\"] 
== \"POST\") {
// collect value of input field
$ListName = 
test_input($_POST[\'ListName\']);
$Task1 = 
test_input($_POST[\'Task1\']);
$Task2 = 
test_input($_POST[\'Task2\']);
$Task3 = 
test_input($_POST[\'Task3\']);
$Task4 = 
test_input($_POST[\'Task4\']);
$Task5 = 
test_input($_POST[\'Task5\']);
$Task6 = 
test_input($_POST[\'Task6\']);
$Task7 = 
test_input($_POST[\'Task7\']);
$Task8 = 
test_input($_POST[\'Task8\']);
$Task9 = 
test_input($_POST[\'Task9\']);
$Task10 = 
test_input($_POST[\'Task10\']);

}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = 
htmlspecialchars($data);
return $data;
}

$sql = \"INSERT INTO 
AutoPilotTaskLists (ListName, 
Task1, Task2, Task3, Task4, 
Task5, Task6, Task7, Task8, 
Task9, Task10) VALUES 
(\'$ListName\', \'$Task1\', 
\'$Task2\', \'$Task3\', \'$Task4\', 
\'$Task5\', \'$Task6\', \'$Task7\', 
\'$Task8\', \'$Task9\', 
\'$Task10\')\";

if ($conn->query($sql) === 
TRUE) {
echo \"New List Created\";
} else {
echo \"Error: \" . $sql . \"<br>\" 
. $conn->error;
}

$conn->close();


?>
  • ...然后您有另一个页面 URL 并将其用作 action 属性(如 href),您的问题是什么?
  • 我只是进行了编辑以更好地解释它。

标签: forms syntax-error htmlspecialchars


【解决方案1】:

我已经找到了答案。以下“准备”值。

if ($_SERVER["REQUEST_METHOD"] == "POST") {
// collect value of input field
$ListName = mysqli_real_escape_string($conn, $_POST['ListName']);
$Task1 = mysqli_real_escape_string($conn, $_POST['Task1']);
$Task2 = mysqli_real_escape_string($conn, $_POST['Task2']);
$Task3 = mysqli_real_escape_string($conn, $_POST['Task3']);
$Task4 = mysqli_real_escape_string($conn, $_POST['Task4']);
$Task5 = mysqli_real_escape_string($conn, $_POST['Task5']);
$Task6 = mysqli_real_escape_string($conn, $_POST['Task6']);
$Task7 = mysqli_real_escape_string($conn, $_POST['Task7']);
$Task8 = mysqli_real_escape_string($conn, $_POST['Task8']);
$Task9 = mysqli_real_escape_string($conn, $_POST['Task9']);
$Task10 = mysqli_real_escape_string($conn, $_POST['Task10']);

}

剩下的唯一问题是,如果我尝试在表单的文本区域中写入段落,它不会将其记录在数据库中。它将段落之间的空白视为不存在。

但它确实以写入数据库的方式保存它。所以解决这个问题的方法是在输出页面上使用 css 来正确显示空白。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多