我有一个带有文本区域的表格。用户输入存储在数据库中的文本块。
偶尔,用户会从包含智能引号或emdashes的Word中粘贴文本。这些字符在数据库中显示为:
我应该在输入字符串上调用什么函数来将智能引号转换为常规引号,并将emdashes转换为常规破折号?
我在PHP工作。
更新:感谢所有的伟大反应到目前为止。Joel网站上关于编码的页面内容非常丰富:http://www.joelonsoftware.com/articles/Unicode.html
关于我的环境的一些注意事项:
MySQL数据库使用UTF-8编码.同样,显示内容的HTML页面通过显式设置元内容类型来使用UTF-8 (Update:)。
在这些页面上,智能引号和emdashes显示为带有问号的菱形。
解决方案:
再次感谢你的回复。解决办法有两方面:
htmlspecialchars()而不是htmlentities()。发布于 2008-10-06 19:24:28
这听起来像是Unicode问题。Joel在这个话题上有一个很好的起点:http://www.joelonsoftware.com/articles/Unicode.html
发布于 2008-10-07 16:02:19
mysql数据库使用UTF-8编码.同样,显示内容的html页面使用的是UTF-8。
HTML的内容可以是UTF-8,是的,但是您是否显式地设置了HTML页面的内容类型(编码)(通过PHP生成)?也去了八号?尝试返回Content-Type头部的"text/html;charset=utf-8"或添加<meta>标记到您的HTML:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>这样,提交给PHP的数据的内容类型也将相同。
我也遇到了类似的问题,添加<meta>标签对我很有帮助。
发布于 2008-10-06 19:30:16
听起来真正的问题是数据库没有使用与页面相同的字符编码(可能应该是UTF-8)。在这种情况下,如果任何用户提交一个非ASCII字符,您可能会在数据库中看到奇怪的字符。找到并修复其中的一些(卷引号和em破折号)并不能解决真正的问题。
下面是一些关于将数据库迁移到另一个字符编码的信息,至少对于MySQL数据库是这样的。
https://stackoverflow.com/questions/175785
复制相似问题