【问题标题】:Save Newlines in Mysql在 Mysql 中保存换行符
【发布时间】:2012-09-07 05:16:17
【问题描述】:

我刚刚发现我保存的所有数据都没有任何新行。

我尝试在这里和谷歌上搜索解决方案,但到目前为止没有运气。 我发现 nl2br() 可以将 \n 换成 <br/> 但它不适用于 当我从数据库中取出数据并输出时。

现在文本区域的文本被保存并输出如下:

始终使用 eofuse 监控器。AUSB 端口允许用户备份已在 JesterTLXtra 上录制的节目。也可以连接 AUSB 键盘以快速输入名称和数字。节目文件与 JesterML 桌面兼容。ADMX 端口允许将 JesterTLXtra 用作备份控制台...

我对 preg_replace 也不是很好,所以我也搞砸了。

如何使用换行符和换行符将数据保存到 mysql 中?

我使用的 preg_replace() 用于一些卫生:

$pattern = "/[^a-zA-Z0-9-.@]/";

主要文本区域:

                                <LABEL CLASS="NORMAL_LABEL" FOR="P_DESC_EN">DESCRIPTION-EN</LABEL>
                            <TEXTAREA ID="P_DESC_EN" NAME="P_DESC_EN" COL="15" ROWS="10"></TEXTAREA>

插入文件:

    <?php
    $long_desc_en = ($_POST['P_DESC_EN']);
    $pattern = "/[^a-zA-Z0-9-.@]/";
        $clean_long_desc_en = preg_replace($pattern, " ", $long_desc_en);
        $result = mysql_query("INSERT INTO main_table 
        (alpha_p_long_desc_en) VALUES 
        ('$clean_long_desc_en')"); 
        if(!$result)
        {
        echo "Error! ".mysql_error();
        }
?>

基本上就是这样

【问题讨论】:

  • 您存储数据的字段类型是什么?文本? varchar?
  • 这个问题缺少 3 件事,您使用的代码也将数据添加到数据库、数据库结构以及用于提取和显示数据的代码
  • 示例中的长文本是类型文本。较短的是 varchar 类型。表列被命名为: -long_desc_en -long_desc_mk -short_desc_en -short_desc_mk @Dagon - 感谢您的编辑,没有注意到 br 实际上是换行。而且我的代码无关紧要,因此无法正常工作
  • 大声笑-如果代码没有问题,那你为什么要问?
  • 我要求一个全局解决方案来解决问题,而不是对我的代码进行本地修复。这里,有代码。但同样,我只需要对问题的想法,而不是代码

标签: php mysql newline


【解决方案1】:

几个错误。

  1. 您的 preg 替换说删除不在该范围内的任何内容。包括换行符。
  2. 您并没有逃避您的数据注入 MySQL。最好使用 PDO 或 mysqli 函数,但至少使用 mysql_real_escape_string() 来转义变量。

.

<?php 

$long_desc_en = ($_POST['P_DESC_EN']); 
$pattern = "/[^a-zA-Z0-9-.@\n]/"; 
$clean_long_desc_en = mysql_real_escape_string(preg_replace($pattern, " ", $long_desc_en)); 
$result = mysql_query("INSERT INTO main_table (alpha_p_long_desc_en)
                         VALUES ('$clean_long_desc_en')");  
if(!$result) {
    echo "Error! ".mysql_error(); 
} 

?> 

(但请查看 PDO;下面是一个粗略的示例,只需添加错误处理即可。

$clean_long_desc_en = preg_replace($pattern, " ", $long_desc_en); 
$sth = $dbh->prepare("INSERT INTO main_table (alpha_p_long_desc_en)
                         VALUES (:clean_long_desc_en)");  
$sth->bindParam(':clean_long_desc_en', $clean_long_desc_en);
$sth->execute();

【讨论】:

  • 那么如何在 preg_replace 中添加换行符呢?另一个错误是关于可能的 sql 注入?
  • 我在 pre_replace 中添加了 \n。主要是 sql 注入,是的,但是如果您要插入转义字符(例如换行符),那么当您插入它们时它们将不会转义。变得令人困惑 - 所以在进入数据库时​​总是和默认情况下转义字符串。
  • 我已经像你说的那样添加了\n。然后在输出上使用 nl2br() 。奇迹般有效!谢谢。只是另一个问题 - 放什么所以我也可以添加断线,我似乎也想念那些。 @Dagon - 当然是,我自己这么说的。问题不在于我的代码,而在于如何
  • @DavidLawDrakulovski 当然是关于代码的,你在说什么?如果不是关于代码,为什么你必须编辑代码才能让它工作?
  • 关闭 - 斜线错误。并为空格添加一个空格 "/[^a-zA-Z0-9\-\.\@\n ]/" 如果你想要所有空格,你可以添加 \s (允许空格),这可能会帮助你很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多