如何在PHP中使用mysqli_real_escape_string()转义除换行符以外的所有字符?

时间:2019-03-25 06:35:40

标签: php mysqli

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

来自mysqli_real_escape_string上PHP的官方docs

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

escapestr:要转义的字符串。

     

编码的字符为NUL(ASCII 0),\ n,\ r,\,',“和Control-Z。

如何从此列表中省略\n却保持其他完整无缺?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以像这样使用自定义转义功能:

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

    return str_replace($search, $replace, $value);
}