正确格式化数据库中的HTML

时间:2016-10-26 20:38:43

标签: php html mysql phpmyadmin

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

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

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

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

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

我认为这是一些自动文本编码转换或其他东西,但在插入之前在HTML上运行mb_detect_encoding()确实证实编码是UTF-8,与表utf8_unicode_ci相同。 / p>

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

什么是phpMyAdmin修复文本,如何在插入数据库之前完成?为什么它会自动更新行?

1 个答案:

答案 0 :(得分:0)

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

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

(?:.+)?

所以完整的表达是:

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