Я пытаюсь использовать функцию 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
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);