让我疯了......
带表单的页面通过以下方式编码为Unicode(UTF-8):
<meta http-equiv="content-type" content="text/html; charset=utf-8">
条目列为text utf8_unicode_ci
从Word文档中复制文本,其中“在其中:“1922.”
是insta-fail,最终在数据库中以â��1922.â��
结尾(在表单中键入新数据,包括{{1}工作得很好......它是从Word中剪切和粘贴的......)
幕后的PHP步骤是:
帮助?
答案 0 :(得分:1)
调用mysql_set_charset让数据库知道您将发送UTF-8编码的字符串。
在表单中输入新数据,包括“工作正常......
好"
是正常的ASCII引用。 “
和”
不是,它们是智能引号,是非ASCII字符。他们是否来自Word是不重要的;所有非ASCII字符都将被视为相同。
- 从POST中获取值
- 运行HTML Purifier默认设置
这是一个坏主意。 HTML Purifier应该在HTML字符串上运行,并且您打算以HTML格式输出,对于需要让用户提交HTML的相对罕见的情况。
运行所有输入文本完全是错误的。通常你应该允许任何旧文本,然后当你在HTML中输出该文本时,你应该通过它调用htmlspecialchars()
。
否则,您正在破坏用户输入<
和&
的能力,就像我在这篇文章中一样,当您输出已处理或未输入时,您仍然存在跨站点脚本的风险 - 资源数据。
答案 1 :(得分:1)
“1922.”
和“1922”。是两个不同的字符串
单词的引号不是双引号“!=”
您描述的列是text utf8_unicode_ci
。 utf8_unicode_ci
是排序规则,请确保该列上的字符集设置为utf8
。
然后我会确保使用SET NAMES utf8 COLLATE utf8_unicode_ci...
如果你已经完成了并且仍然没有正确保存,请确保你的php已启用mbstrings并尝试使用mb_
函数。
您可能有很多根本原因,但我认为charset
列和SET NAMES ...
应解决此问题。