Как использовать mysqli_real_escape_string () в PHP, чтобы экранировать все символы кроме символа новой строки? - PullRequest
0 голосов
/ 25 марта 2019

У меня есть текстовый ввод, который может содержать специальные символы, которые необходимо экранировать. Но я также хочу сохранить новые строки. Используя 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 из этого списка, но оставить остальные нетронутыми?

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Решение 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);
?>
0 голосов
/ 25 марта 2019

Вы можете использовать пользовательскую функцию перехода, например, такую:

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

    return str_replace($search, $replace, $value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...