PHP sql 处理特殊字符


$sql = "INSERT INTO golf (datum, odkud, odjezd ) VALUES ('$datum', '$odkud', '$odjezd')";
if(!mysqli_query($connection,$sql)) {
echo '<p class="error">Záznam nebyl vložen</p>';
} else {
header ("location :/golf");
}

你好,我正在写我的论文给学校。我有这个代码,我的主管一直告诉我"对待特殊字符"。我该怎么做?他只看到了我给你看的代码。

你的主管只是要求你对待特殊字符😊。为此,@Pedro的回答就足够了。

$odjezd = mysqli_real_escape_string($connection, $odjezd)     // copied from @Pedro’s answer

但是,如果您需要更多的验证, 您可以检查日期的格式是否正确吗?

$test_arr  = explode('/', $POST[‘date’]);
if (count($test_arr) == 3) {
if (checkdate($test_arr[0], $test_arr[1], $test_arr[2])) {
// valid date ...
} else {
// problem with dates ...
}
} else {
// problem with input ...
}

同样,您可以根据需要验证数据。

这可能会有所帮助。

用户输入必须在插入之前进行清理,否则您将打开一扇进入服务器的门。
您还需要验证输入。我通常做的是创建一系列正则表达式来单独验证每个字段,或使用可用的 php 验证过滤器之一。
请记住,您可以 - 并且应该 - 进行客户端验证,这对于减少服务器负载非常有用,但作为安全措施的值为 0,因为它很容易被伪造。 服务器端验证是最重要的,因为它是您的最后一道防线
不要轻视用户输入,由于不良或不存在的用户输入清理,大量服务器被黑客入侵。


要直接回答您的问题,mysqli_real_escape_string()是您转义特殊字符的朋友,即:

$odjezd = mysqli_real_escape_string($connection, $odjezd)

编码的字符为 NUL (ASCII 0)、、\r、\、'、" 和 Control-Z。


更新:

我已经使用了mysqli_real_escape_string,但我仍然可以提交 "a{b}c'=%" 我希望它删除规范字符并只输入 唰......如何?

假设$odkud只能包含字母或数字,并且长度为 5 个字符仅用于验证,我们可以使用 preg_match() 作为验证器,即:

$id  = $_REQUEST['id']; 
if (preg_match('/^[a-zd]{5}$/i', $odkud)) {
# Successful match
} else {
# Match attempt failed
}

实时正则表达式示例和解释


如果您只需要删除特殊字符,请使用上面提到的 php 过滤器之一或preg_replace,即:

$odkud_filtered = preg_replace('/[^a-zd]/i', '', $odkud);
# abc

实时正则表达式示例和解释

最新更新