从php中的字符串中转义特殊字符
Posted
技术标签:
【中文标题】从php中的字符串中转义特殊字符【英文标题】:escape special character from string in php 【发布时间】:2016-01-05 20:23:03 【问题描述】:我们正试图从我们的字符串中转义一些特殊字符,请告诉我我们必须使用的函数 例如HTC Desire 210 – 白色 在此示例中,我们转义 -(连字符)特殊字符。 在上面的示例中,我们有很多具有不同特殊字符的产品名称,我们对其进行了转义。 感谢您的合作。
【问题讨论】:
到目前为止您尝试过什么?发布您的尝试 Remove all special characters from a string的可能重复 【参考方案1】:如果你想将字符串用于数据库的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() 转义字符串,它返回一个在字符前添加反斜杠的字符串,例如:
单引号 (') 双引号 (") 反斜杠 (\) NUL(NUL 字节)但是addslashes()
有一些sql注入漏洞,详细看这个问题的答案Examples of SQL Injections through addslashes(),所以如果你在做数据库操作最好使用mysqli_real_escape_string()
函数。
或者如果你想为正则表达式转义字符,那么你可以使用 preg_quote ( string $str [, string $delimiter = NULL ] ),在属于正则表达式的每个字符前面放置一个反斜杠语法。 正则表达式字符是:。 \ + * ? [ ^ ] $ ( ) = ! | :-
注意:但要小心preg_quote()
不会逃脱single(')
或double quote(")
。
【讨论】:
Haritsinh Gohil 您可以使用 mysqli_real_escape_string() 函数转义字符串,但它不是为此目的而构建的。它是在将字符串发送到 MySQL 服务器之前构建的。 (另外你不能直接转义字符串;在此之前你需要一个链接连接)。 @AdeelRazaAzeemi 你是对的,刚刚更新了答案,谢谢【参考方案2】:在这个函数中传递字符串。
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 - ***
【讨论】:
【参考方案3】:如果您需要转义会破坏正则表达式/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的讨论。
【讨论】:
【参考方案4】: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。
【讨论】:
为什么你会鼓励任何人在新代码中使用这个功能?它甚至没有回答 OP 的问题。【参考方案5】:使用系统函数$city = $mysqli->real_escape_string($city);
这里:http://php.net/manual/en/mysqli.real-escape-string.php
【讨论】:
【参考方案6】:您可以使用str_replace,例如;
str_replace(array(':', '-', '/', '*'), '', $string);
【讨论】:
以上是关于从php中的字符串中转义特殊字符的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 JavaScript 中转义 HTML 特殊字符吗?