【发布时间】:2016-01-05 20:23:03
【问题描述】:
我们正试图从我们的字符串中转义一些特殊字符,请告诉我我们必须使用的函数
例如HTC Desire 210 – 白色
在此示例中,我们转义 -(连字符)特殊字符。
在上面的示例中,我们有很多具有不同特殊字符的产品名称,我们对其进行了转义。
感谢您的合作。
【问题讨论】:
-
到目前为止您尝试过什么?发布您的尝试
我们正试图从我们的字符串中转义一些特殊字符,请告诉我我们必须使用的函数
例如HTC Desire 210 – 白色
在此示例中,我们转义 -(连字符)特殊字符。
在上面的示例中,我们有很多具有不同特殊字符的产品名称,我们对其进行了转义。
感谢您的合作。
【问题讨论】:
如果你想将字符串用于数据库的SQL操作,那么你可以使用函数mysqli_real_escape_string()转义mysqli中的特殊字符。
语法:
mysqli_real_escape_string(connection,escapestring);
例子:
<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$your_string = 'string "hi" ';
$escaped_string = mysqli_real_escape_string($con, $your_string);
$sql = 'select * from tablename where fields like "%'.$escaped_string. '%" ';
$result = $conn->query($sql);
//here you can iterate over result array for displaying result
?>
您可以使用 addslashes() 转义字符串,它返回一个在字符前添加反斜杠的字符串,例如:
但是addslashes()有一些sql注入漏洞,详细看这个问题的答案Examples of SQL Injections through addslashes(),所以如果你在做数据库操作最好使用mysqli_real_escape_string()函数。
或者如果你想为正则表达式转义字符,那么你可以使用 preg_quote ( string $str [, string $delimiter = NULL ] ),在属于正则表达式的每个字符前面放置一个反斜杠语法。 正则表达式字符是:。 \ + * ? [ ^ ] $ ( ) { } = ! | :-
注意:但要小心preg_quote() 不会逃脱single(') 或double quote(")。
【讨论】:
在这个函数中传递字符串。
function clean($string){
$string = str_replace(' ', '-', $string); // Replaces spaces with hyphens.
return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
}
欲了解更多信息,请查看Remove Special Character - Stackoverflow
【讨论】:
如果您需要转义会破坏正则表达式/PCRE 函数的字符(例如,preg_match()),如果没有转义,您可以使用preg_quote()
例如,假设你的针和干草堆是:
$needle = "needle(";
$haystack = "ibivfdubdvwbneedle(cihbdhcbds";
下面的preg_match()会抛出警告:
var_dump(preg_match("/" . $needle . "/", $haystack)); -----> WARNING preg_match(): Compilation failed: missing ) at offset 7 on line number 9 bool(false)
因为左括号是正则表达式语法中使用的字符。但是,如果你在针上使用preg_quote(),左括号将被转义并执行正则表达式检查:
var_dump(preg_match("/" . preg_quote($needle) . "/", $haystack)); ----> int(1)
更多关于preg_quote()here的讨论。
【讨论】:
mysqli_real_escape_string() 函数对字符串中的特殊字符进行转义,以便在 SQL 语句中使用。
语法:
mysqli_real_escape_string(connection,escapestring);
示例转义字符串中的特殊字符:
<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$lastname = mysqli_real_escape_string($con, $_POST['lastname']);
$age = mysqli_real_escape_string($con, $_POST['age']);
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$firstname', '$lastname', '$age')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>
连接必需。指定要使用的 MySQL 连接
转义字符串 必需。要转义的字符串。编码的字符为 NUL (ASCII 0)、\n、\r、\、'、" 和 Control-Z。
【讨论】:
使用系统函数$city = $mysqli->real_escape_string($city);
【讨论】:
您可以使用str_replace,例如;
str_replace(array(':', '-', '/', '*'), '', $string);
【讨论】: