gpt4 book ai didi

php - 从数据库格式化文本

转载 作者:可可西里 更新时间:2023-11-01 08:54:02 25 4
gpt4 key购买 nike

我的页面上有一个文本区域,允许用户在其中编写文本。为了保留用户在输入时所做的换行符,我使用:

editBox.val().replace(/\r?\n/g, "\r\n");

在数据上传到我正在使用的数据库之前:

$data = mysql_real_escape_string($data);

我这样做是为了尽可能多地保留数据,而不会剥离以后可能有用的数据。这也有助于我保留以后可以允许的可能的格式选项。我读到这是一个很好的做法。

问题是:

当从数据库中提取数据时,我需要清理它。为此,我正在使用:

function cleanData($data) 
{
$data = nl2br($data);
$data = strip_tags($data,"<br><b><p><i><h1><h2><h3><h4><h5><h6>");
return $data;
}

我允许某些标签,这些标签稍后将与一个小型自制的所见即所得编辑器一起使用。但是,这允许用户输入以下内容:

<p title="some junk here">hax</p>

虽然 title 属性不是非常烦人,但其他属性可能。我不确定用户是否可以添加 class 和 id 属性,但我不明白为什么他们不能。它还会删除任何看起来像标签的东西,例如表情符号:"*<:o) <- happy clown"最终看起来像这样:"*"

我尝试使用:

$data = filter_var($data, FILTER_SANITIZE_SPECIAL_CHARS);

然而,这不是 cleanData 函数,而是对显示我的 <br> 的所有内容进行编码将换行符转换为文本而不是添加换行符。



简而言之,我的问题是:

我似乎找不到清理数据的好方法,因此保留了换行符/br,同时还保留了添加某种所见即所得格式的可能性。我真的不在乎它是 html 标签还是 bbCode: [b] 之类的东西.


我的问题如下:

是否有更聪明的方法来执行此操作,或者我的方法是否可以通过一些调整来实现?

你们会怎么做? :) 除非有非常强烈的动机,否则我想避免使用外部库。


PS:我搜索了很多,但没有找到满意的答案 - 我也花了很长时间使这篇文章易于阅读和理解。我希望我做对了。

最佳答案

首先,

editBox.val().replace(/\r?\n/g, "\r\n");

这不应该在客户端 (JavaScript) 完成,而应该在服务器端 (PHP) 完成,如果您想确定它会发生的话。可以通过禁用 JavaScript 或从其他站点发帖来规避。

关于实际问题,我会使用一些预制标记语言,例如 Textile ,这也是 StackOverflow 上使用的内容。

但是如果您希望允许一些自定义格式,您可以(如您所建议的那样)使用 BB-code ( [b][i] 等)。我实现它的方法是首先使用 htmlspecialchars 将所有 HTML 特殊字符替换为它们各自的 HTML 实体。 .在此之后,您可以替换诸如 [b] 之类的内容与 <strong>

示例

$str = "See, [b]evil[/b] input<br/>, <i>etc</i>.";
$str = htmlspecialchars($str);
print $str; // "See, [b]evil[/b] input &lt;br/&gt;, &lt;i&gt;etc&lt;/i&gt;."
$str = str_replace(array("[b]","[/b]"),array("<b>","</b>",$str);
print $str; // "See, <b>evil</b> input &lt;br/&gt;, &lt;i&gt;etc&lt;/i&gt;."

为避免错误标记,您可能应该使用一些正则表达式将 BBcode 替换为 HTML 标记。

关于php - 从数据库格式化文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8916881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com