【问题标题】:Correct formatting of HTML in database正确格式化数据库中的 HTML
【发布时间】:2016-10-27 22:21:12
【问题描述】:

我正在使用 TinyMCE 将一些 HTML 保存到 phpMyAdmin 中的 SQL 表中。从表中插入和检索行工作正常。

我正在使用正则表达式来翻译检索到的文本中的一些短代码,这就是出现问题的地方。

这是我的正则表达式,它只是获取两个短代码之间的文本,可能带有 html 标记和换行符:

/(<.+>)?[[]{$code}[]](<\/.+>)?((?:\n.+\n?)+)(<.+>)?[[]{$code}[]](<\/.+>)?/

当我从数据库中检索 HTML 并在其上运行正则表达式时,preg_match_all() 无法匹配任何内容,但是当我双击数据库中的行并打开内联编辑器时,phpMyAdmin 会匹配。 ..something 并自动对行执行更新并将文本设置为新值;然后,当我对新更新的值运行正则表达式时,preg_match_all() 匹配正确的值。

我在想这是一些自动文本编码转换之类的,但在我插入之前在 HTML 上运行 mb_detect_encoding() 确实确认编码是 UTF-8 与表格的 utf8_unicode_ci 相同。

然后我比较了 Notepad++ 更新前后的文本和 EOL 字符,它们完全相同,但我的正则表达式在 phpMyAdmin 更新之前不起作用。

phpMyAdmin 正在做什么来修复文本,在它被插入数据库之前我该怎么做?为什么它会自动更新行?

【问题讨论】:

  • 如果我是你,我会先将值保存在 $_SESSION 中,然后再将其保存到数据库中,然后在 PHPMyAdmin 上发生更新后我将获得新值并进行比较。也许使用 strlen(),使用 htmlspecialchars()...甚至用 ord() 替换每个字符...我只是在大声思考。附言如果您可以显示一些代码或提供 jsfiddle 会更好地帮助我们。

标签: php html mysql phpmyadmin


【解决方案1】:

我在正则表达式中添加了更多代码来检查同一行的短代码之后的内容,现在preg_match_all() 每次都正确匹配。我仍然不确定那里发生了什么,因为在我尝试过的每个测试中更新前后的内容都是相同的(相同的文本、相同数量的空格和换行符)。

无论如何,我通过在检查结束 HTML 标记后添加以下正则表达式来修复它:

(?:.+)?

所以完整的表达式是:

(<.+>)?[[]{$code}[]](<\/.+>)?(?:.+)?((?:\n.+\n?)+)(<.+>)?[[]{$code}[]](<\/.+>)?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2016-07-18
    相关资源
    最近更新 更多