簡體   English   中英

如何在PHP中使用mysqli_real_escape_string()轉義除換行符以外的所有字符?

[英]How to use mysqli_real_escape_string() in PHP to escape all characters except newline?

我有一個文本輸入,其中可以包含需要轉義的特殊字符。 但是我也想保留換行符。 使用PHP的mysql_real_escape_string(),如何可以避免換行符('\\ n')的轉義。

從PHP的官方文檔 (關於mysqli_real_escape_string

mysqli_real_escape_string ( mysqli $link , string $escapestr ) : string

escapestr:要轉義的字符串。

編碼的字符為NUL(ASCII 0),\\ n,\\ r,\\,',“和Control-Z。

如何從此列表中省略\\n但保持其他完整無缺?

解決方案1:您可以通過以下方法實現此目的:

  • 使用\\n將您的字符串分解為數組。
  • 循環數組,使每個項目都轉義。
  • 使用Implode和\\n作為膠水將它們放回去。

碼:

<?php
  $array = explode('\n',$stringToEscape);
  $index = 0;
  foreach($array as $string){
   $array[$index] = mysqli_real_escape_string ( $link , $string) ;
   $index++;
  }
  $excapedString = implode('\n',$array);
?>

解決方案2:另一個解決方案:

  • 用一些文本替換\\n (例如# NEWLINE #)。
  • 使字符串逸出。
  • 將步驟1中的文本替換為\\n

碼:

<?php
 $string = '##YOUR STRING TO BE ESCAPED##';
 $stringToEscape = str_replace('\n','#_NEWLINE_#',$string);
 $escapedString = mysqli_real_escape_string ( $link , $stringToEscape ) ;
 $finalString = str_replace('#_NEWLINE_#','\n',$escapedString);
?>

您可以像這樣使用自定義轉義功能:

 function my_escape_function($value) { $search = array("\\\\", "\\x00", "\\r", "'", '"', "\\x1a"); $replace = array("\\\\\\\\","\\\\0", "\\\\r", "\\'", '\\"', "\\\\Z"); return str_replace($search, $replace, $value); } 

暫無
暫無

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

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