在PHP / MySQL中保留HTML实体

时间:2013-05-07 06:23:46

标签: php mysql forms

我有一个表单,我想在其中输入稍后将组装成HTML文档的元素。我正在进入的,以及我最终需要的东西,通常包括诸如é, - 和相关元素之类的东西。编辑为我转换了那些,正是我想要避免的!我输入的例子是非破坏空间的HTML代码(&符号分号),带有急性重音的字母e(&符号 - 分号)和em-dash(&符号 - 分号 - 分号)

我需要保留这些字符串。我希望它们保存在数据库中,它们只有一次,但是当我重新提交包含20个左右字段的页面时,因为我对其他字段进行了更改,然后我最终得到了正在呈现的代码。但我不希望它被渲染,我希望它保留,以便浏览器将正确呈现我的最终文档。在第二次或第三次提交之后,我总是以我的实体所在的垃圾结束。

我已经尝试过mysql_real_escape_string(),htmlentities(),htmlspecialcharacters(),甚至html_entity_decode(htmlentities()),但没有任何效果。我最终得到了各种程度的废话。

我不需要系统使用em-dash或重音字符并将其转换为实体,尽管这不会有害。我只是想保留我放入的代码。

我该怎么做? (为什么这么多工作?)

这是表单字段:

<textarea name="qih_quote" cols="75" rows="5" wrap="soft"><?php echo $s['qih_quote'];?></textarea>

以下是提交脚本中的行:

$qih_quote = $_POST['qih_quote'];

我已经将$ _POST变量包装在我能想到的所有内容中,如上所述。我想要的只是我放在textarea中的确切字符串保存在表格中,当我回到它时显示在textarea中,并且可以在任何时候再次保存到表格中。 / p>

3 个答案:

答案 0 :(得分:1)

尝试确保在保存数据的MySQL表中有正确的排序规则,以便保留特殊字符,例如utf8_general_ci,它应该处理unicode。

然后在将数据保存到数据库时尝试使用htmlspecialchars(),在读取数据时尝试使用htmlspecialchars_decode()。

答案 1 :(得分:0)

好的,问题是textarea的形式,我需要在那里编码HTML实体。这是最终的解决方案:

<textarea name="qih_quote" cols="75" rows="5" wrap="soft"><?php echo htmlspecialchars ($s['qih_quote'], ENT_QUOTES);?></textarea>

答案 2 :(得分:0)

我认为有这个问题的人可能想要查看html_entity_decode而不是htmlspecialchars。前者将所有html实体呈现为字符串,而后者仅适用于小子集,至少根据我阅读的文档。