【问题标题】:Textarea value with newlines带有换行符的文本区域值
【发布时间】:2013-12-09 11:40:57
【问题描述】:

我有一个包含 textarea 的 html 表单,并且在提交时操作页面会验证 $_POST 值。 如果表单的任何部分为空/不正确,页面将被重定向回表单页面。为了避免用户再次输入所有数据,我已将所有 $_POST 值加载到 $_SESSION 变量中。

问题是当来自 textarea 的会话数据回显到 textarea 时,我得到 \r\n 应该在哪里换行。如果我使用nl2br(),它只会打印出<br />,与reg_replace 相同。

在使换行符正确显示之前,我应该对 $_SESSION 变量做些什么吗?

<textarea name="job_descript" class="tarea" 
 cols="40" rows="6" placeholder="Tell us about the job">
<?php 
  if(isset($_SESSION['DESCRIPT'])){
    echo $_SESSION['DESCRIPT'];
    unset($_SESSION['DESCRIPT']);
 } ?></textarea>

function clean($str) 
{
    $str = trim($str);
    if(get_magic_quotes_gpc()) 
            {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}
$descript = clean($_POST['job_descript']);
$_SESSION['DESCRIPT'] = $descript;

【问题讨论】:

  • 您能展示将数据放入会话的代码吗?我猜你正在以编码方式输入数据。 (使用htmlspecialchars()htmlentities() ?)
  • 不幸的是我没那么先进。这是代码: $descript = clean($_POST['job_descript']);功能清洁($str){$str=修剪($str); if(get_magic_quotes_gpc()) { $str = stripslashes($str); } 返回 mysql_real_escape_string($str); } $_SESSION['DESCRIPT'] = $descript;
  • 不要尝试将代码放在评论中...只需编辑您的问题并将其放在那里,或使用一些 pastebin/phpfiddle 站点。
  • 对不起,把代码放在问题里

标签: php html session


【解决方案1】:

您的问题是您在将数据放入会话并再次显示之前正在执行mysql_real_escape_string()。从而将\n 更改为\\n

mysql_real_escape_string() 很有用,不要删除它!否则您的数据库调用将处于危险之中。

您可以尝试将mysql_real_escape_string() 删除,然后将其放置在您实际对数据库执行某些操作之前的某个位置。

或者你可以做的是有两个版本的数据... $descript 和 $descript_escaped。使用第一个在 HTML 中显示数据。并在查询中使用第二个。

【讨论】:

  • 更好的解决方案是使用准备好的语句,因为mysql_real_escape_string 实际上并没有完全保护数据库免受 SQL 注入,它只是让它变得更加困难
  • @Markasoftware 实际上它确实完全保护。唯一的问题是当您运行直接查询来更改字符集时,让 mysql_* 函数认为第一个字符集仍在使用中。如果您不这样做,mysql_real_escape_string() 可以安全使用。
猜你喜欢
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多