nl2br()和mysqli_real_escape_string()一起工作的问题

时间:2014-11-10 17:38:36

标签: php

我正在尝试使用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

1 个答案:

答案 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)已被字符串\n0x5c0x6e)取代。

因此,请先致电nl2br

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