【发布时间】:2025-12-16 00:15:01
【问题描述】:
我无法从数据库中获取数据并在 HTML 页面文本区域中回显。
这是用于将数据导入数据库的代码:
$_SESSION['content'] = mysqli_real_escape_string($link, strip_tags($_POST['content'],'<a>'));
这只是去除了 HTML 标记,除了数据库中的链接和存储。如果您查看数据库,换行符是不可见的,但在那里,所以我假设它们是 \n 和 \r。
如果我要输入文本区域:
This should be a
New line
数据库将其存储为:
This should be a<br>
New line
当回显到文本区域时,会显示以下内容:
This should be a \r\n\r\nNew line
我确定我遗漏了一些非常简单的东西,非常感谢任何帮助。
更新:
如果我删除 mysqli_real_escape_string,换行符会被保留并且可以正常工作,我是否必须为此牺牲安全性?
已解决:
mysqli_real_escape_string 导致问题,不要回显已应用此功能的变量。仅在从数据库中插入、删除等时使用 mysqli_real_escape_string,而不是之前,绝对不是之后;)
谢谢大家!
【问题讨论】:
-
尝试在您发布的行之前使用
$_POST['content'] = stripslashes($_POST['content'])。但是我不确定这会有所帮助...php.net/manual/en/function.stripslashes.php -
当然这只会去掉换行符,使 \n -> n?
-
@user964145 如果在数据库中存储为 \\\n (转义斜杠),则不会
-
我不知道。必须调用该函数来清除转义字符串。不使用它,例如,如果您在表单中输入
I don't know,您将在 POST 数据中获得I don\'t know。 -
@lorenzo-s,这是正确的,但它也会逃脱 \\\n