我正在尝试使用php nl2br()函数将\ r \ n字符转换为电子邮件中的<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
答案 0 :(得分: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);