gpt4 book ai didi

PHP mySQLi real_escape_string 不适用于撇号

转载 作者:行者123 更新时间:2023-11-29 22:16:54 25 4
gpt4 key购买 nike

我正在尝试使用 MySqli real_escape_string 准备一些文本以包含在 SQL 查询中,但就目前情况来看,real_escape_string 似乎不能很好地处理撇号。我在下面添加了一些测试代码:

function validMySQLtest($var) {

$conn= connopen();
conncheck();
$var = str_replace("£", "£", "$var");
$var = str_replace("'", "\'", "$var");
$var=htmlentities($var, ENT_QUOTES, "UTF-8");
echo "Entities " . $var . "<br />";
$var=stripslashes($var);
echo "Stripslashes " . $var . "<br />";
$var=strip_tags($var);
echo "Striptags " . $var . "<br />";
$var = $conn->real_escape_string($var);
echo "Escape String " . $var . "<br />";
connclose();
return $var;
}

validMySQLtest("In medieval times Germany produced most of the world's brass.");

代码输出如下;

Connected successfully....

Entities In medieval times Germany produced most of the world\'s brass.

Stripslashes In medieval times Germany produced most of the world's brass.

Striptags In medieval times Germany produced most of the world's brass.

Escape String In medieval times Germany produced most of the world's brass.

....Connection closed.

据此我发现 str_replace、stripslashes 和 striptags 似乎可以工作,但 real_escape_string 似乎不起作用。

任何想法将不胜感激。

编辑:为了回应评论,我添加了 connopen 和 conncheck 代码:

// Open connection
function connopen() {

$conn = new mysqli(servername, username, password, dbname);
return $conn;
}

//Check connection
function conncheck() {

$conn = connopen();
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
echo "Connected successfully....<br /><br />";
}
}

最佳答案

技术上正确的答案可能是一个更好的通用文本处理例程,这对编写来说有点挑战,并且可能会让您陷入神秘的细节中,尤其是当您开始处理字符集的模糊性时 - 并且如果您的程序要安全,通常您确实需要这样做,或者更好地避免使用准备好的语句(如上面 tadman 所建议的那样)。

但是,如果您只是想要一种快速而肮脏但简单有效的方法来处理特别是单引号字符,那么这样的方法是有效的。

 $var = htmlspecialchars(str_replace("'", "&rsquo;", $v), ENT_QUOTES, 'ISO-8859-1');

请注意,我们正在替换单引号字符,它不是撇号。从打印上来说,“Sean O'Mara”或“world's Brass”中使用的正确字符是撇号,它在视觉上与单引号 (rsqo) 非常相似,因此从语言角度来看,我们在这里做的是正确的事情。有时这确实是正确的答案,特别是当您希望输出的打印正确时。例如,将大段文本(错误地)输入为“Sean O'Mara”,并用真正的撇号全局替换单引号(这更容易键入)要容易得多。哦,真正的撇号也不会混淆您的数据库,它只是另一个字符,例如“p”或“W”。

关于PHP mySQLi real_escape_string 不适用于撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31142368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com