Проблемы с nl2br () и mysqli_real_escape_string (), работающими вместе

0

Я пытаюсь использовать функцию PHP nl2br() для преобразования\г\п символов в <br> тегов в электронной почте. Кажется, что есть какой-то конфликт, когда я пытаюсь использовать его с mysqli_real_escape_string(). Я могу подтвердить, что отдельно функция mysqli_real_escape_string() дает правильный вывод, и что функция nl2br() правильно преобразовывать соответствующие символы <br> тегов, но они не будут работать вместе. Зачем?!

Я могу подтвердить работы nl2br:

    $message= "This\r\nis\n\ra\nstring\r";
    $message= nl2br($message);
    echo($message);

вывод:

"This is a string"

Я могу подтвердить, что mysqli_real_escape_string() работает:

//assume $_POST['message'] = "this is a string"
$message = mysqli_real_escape_string($connection, $_POST['message']); 
echo($message);

вывод:

This\r\nis\n\ra\nstring\r

Когда я использую их вместе:

$message = nl2br(mysqli_real_escape_string($connection, $_POST['message'])); 

Вывод:

This\r\nis\r\na\r\nstring
Теги:

1 ответ

1
Лучший ответ

mysqli_real_escape_string строк, поэтому nl2br не может их найти (очевидно).

Простой скрипт, демонстрирующий это:

$ cat test.php
$c = mysqli_connect('192.168.33.10', 'root', '');
print("Hello\nWorld\n");
print(mysqli_real_escape_string($c, "Hello\nWorld"));

$ php test.php | hexdump -C  
00000000  48 65 6c 6c 6f 0a 57 6f  72 6c 64 0a 48 65 6c 6c  |Hello.World.Hell|
00000010  6f 5c 6e 57 6f 72 6c 64                           |o\nWorld|

Как вы можете видеть, символ новой строки (0x0a) был заменен на строку \n (0x5c и 0x6e).

Итак, сначала вызовите nl2br:

$message = mysqli_real_escape_string(nl2br($_POST['message']), $connection);
  • 0
    Это работает на полпути. Итак, теперь он создает возврат каретки, но все равно сохраняет / r / n в начале каждой строки.
  • 0
    На самом деле, я понял это. Я выполнил эту функцию после экранирования строки: $ message = str_replace ('\ r \ n', '', $ message); У меня возникли проблемы с этим ... очевидно, есть разница между использованием одинарных и двойных кавычек вокруг '\ r \ n'. "\ r \ n" не работает.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню