簡體   English   中英

從php中的字符串中轉義特殊字符

[英]escape special character from string in php

我們正試圖從我們的字符串中轉義一些特殊字符,請告訴我我們必須使用的函數,例如 HTC Desire 210 – White
在此示例中,我們轉義 -(連字符)特殊字符。 在上面的示例中,我們有很多具有不同特殊字符的產品名稱,我們對其進行了轉義。 謝謝你的合作。

在此函數中傳遞字符串。

function clean($string){
   $string = str_replace(' ', '-', $string); // Replaces spaces with hyphens.
   return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
}

有關更多信息,請檢查此刪除特殊字符 - Stackoverflow

例如,您可以使用str_replace

str_replace(array(':', '-', '/', '*'), '', $string);

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。

如果您需要轉義會破壞正則表達式 / 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)

因為左括號是正則表達式語法中使用的字符。 但是,如果你在 needle 上使用preg_quote() ,左括號將被轉義,正則表達式檢查將執行:

var_dump(preg_match("/" . preg_quote($needle) . "/", $haystack)); ----> int(1)

更多關於preg_quote()的討論在這里

使用系統函數 $city = $mysqli->real_escape_string($city);

這里:http: //php.net/manual/en/mysqli.real-escape-string.php

如果您想將字符串用於數據庫的SQL 操作,那么您可以使用函數mysqli_real_escape_string()轉義 mysqli 中的特殊字符。

句法:

mysqli_real_escape_string(連接,轉義字符串);

例子:

<?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 throughaddslashes() 的答案,所以如果你在做數據庫操作,最好使用mysqli_real_escape_string()函數。

或者,如果要轉義正則表達式的字符,則可以使用preg_quote ( string $str [, string $delimiter = NULL ] )它將反斜杠放在作為正則表達式語法一部分的每個字符的前面 正則表達式字符是: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

注意:但要小心preg_quote()不會轉義single(')double quote(")

您可以使用addcslashes()

在第二個參數中給出的字符之前返回一個帶有反斜杠的字符串

<?php
echo addcslashes("union [", '+,-,[,]');
// output: union \[
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM