我的用户有时会在从Gmail复制内容后将内容粘贴到我网站的表单中。粘贴时字符看起来很正常,但在数据库中,它们会显示额外的特殊字符。
以下是带有特殊字符的文本示例。 它最初发生在这个页面上: http://www.hikingsanfrancisco.com/hiker_community/scheduled_hike_event.php?hike_event_id=91
但看起来制作它的人已经清理了奇怪的角色。
有谁知道如何阻止这种情况发生?
谢谢, 亚历
我使用PHP和MySQL
答案 0 :(得分:1)
我猜你正在获得UTF-8编码文本,但你的数据库配置为ISO-8859-1(AKA Latin-1)。您引用的页面显示:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
因此它声称被编码为UTF-8。 UTF-8页面上的表单将以UTF-8的形式发送回服务器。然后将UTF-8数据发送到数据库,并将其存储为Latin-1编码文本。如果您没有自己处理UTF-8到Latin-1的更改,那么当您将数据发送回浏览器时,您将获得“有趣”的字符。只要文本只使用标准的ASCII字符,那么一切都会好的,因为UTF-8和Latin-1在ASCII字符上重叠。
解决方案是选择一个字符编码并在任何地方使用它。我到处推荐UTF-8。但是,如果您的数据库已经在Latin-1中,那么您将不得不使用Latin-1或更改数据库中的编码并重新编码所有数据。但是,如果数据库中的所有文本都是简单的ASCII,那么就不需要重新编码。
很难说没有示例会发生什么,但是当有趣的(有趣的,有趣的哈哈)字符只有在文本被发送回浏览器时才出现,这是通常的问题。