从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 特殊字符吗?

我可以在 JavaScript 中转义 HTML 特殊字符吗?

如何在 oracle 中转义特殊的正则表达式字符?

如何在 JSON 中转义特殊字符

在 mount 命令中转义特殊字符