我正在创建小型消息传递模块,并且我正在尝试准确存储他们输入的数据。
目前,我从输入中删除 HTML 标签,并添加 htmlentities
来转义特殊字符...
$message = strip_tags($_POST['input']);
$message = htmlentities($message, ENT_QUOTES);
$message = $Database->escape($message);
转义只是mysqli_real_escape_string
然后我使用以下内容尝试再次解析并显示数据...
$message = str_replace('\r\n', '<br>', $message);
$message = str_replace('\n', '<br>', $message);
$message = str_replace('\r', '<br>', $message);
我在尝试显示 \
(反斜杠)时遇到问题,因为它显示两个而不是一个(即使写了一个)
最佳答案
在转义序列周围使用双引号 "
字符而不是单引号 '
字符。
$message = str_replace("\r\n", '<br>', $message);
$message = str_replace("\n", '<br>', $message);
$message = str_replace("\r", '<br>', $message);
在 PHP 中,用双引号括起来的文字字符串的解释方式有所不同。
引用PHP manual page on Strings :
Unlike the double-quoted and heredoc syntaxes, variables and escape sequences for special characters will not be expanded when they occur in single quoted strings.
因此 echo '\n'
将输出一个反斜杠,后跟 n,而 echo "\n"
将输出一个 Unix 行-提要字符。
关于php - 在 PHP 和 MySQL 中插入和显示特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22549428/