【问题标题】:escape special character from string in php从php中的字符串中转义特殊字符
【发布时间】:2016-01-05 20:23:03
【问题描述】:

我们正试图从我们的字符串中转义一些特殊字符,请告诉我我们必须使用的函数 例如HTC Desire 210 – 白色
在此示例中,我们转义 -(连字符)特殊字符。 在上面的示例中,我们有很多具有不同特殊字符的产品名称,我们对其进行了转义。 感谢您的合作。

【问题讨论】:

标签: php mysql arrays


【解决方案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 - Stackoverflow

【讨论】:

    【解决方案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);
        

        【讨论】:

          猜你喜欢
          • 2011-05-11
          • 2011-05-07
          • 1970-01-01
          • 1970-01-01
          • 2017-12-01
          • 1970-01-01
          • 2011-08-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多