为什么在HTML表单中提交引号会变成有趣的字符?

Ste*_*eve 17 character-encoding

我有一个HTML表单,有些用户从MS Word复制/粘贴文本.当有单引号或双引号时,它们会被翻译成有趣的字符,例如:

'™和â™

数据库列是collat​​ion utf8_general_ci.

如何显示相应的字符?

编辑: 问题解决了.以下是我修复它的方法:

mysql_query("SET NAMES 'utf8'");添加/从数据库retreiving之前.(感谢Donal在下面的评论).

有点奇怪,php功能urlencode($text)在显示时应用,因此必须删除.

我还确保页面的标题和ajax请求/响应都是utf8.

Mr.*_* 安宇 27

这看起来像unicode(最有可能是UTF-8)字符的经典案例被解释为iso-8859-1.沿途有几个地方角色可能会被破坏.首先,客户端的浏览器必须发送数据.如果数据无法正确转换为页面的字符编码,则可能会损坏数据.然后服务器读取数据并将字节解码为字符.如果客户端和服务器不同意所使用的编码,则字符将被破坏.然后将数据存储在数据库中; 再次存在腐败的可能性.最后,当数据写在页面上(用于显示到浏览器)时,如果页面没有充分指示它的编码,浏览器可能会错误解释字节.

您需要确保始终使用UTF-8.网页的默认值为iso-8859-1,因此您的网页应与Content-Type标头或元标记一起提供

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Run Code Online (Sandbox Code Playgroud)

(确保您确实在提供该编码中的文本).

通过在流程的所有部分使用UTF-8,您将避免所有可用的Web浏览器和数据库出现问题.


Mar*_*ius 8

检查页面使用的编码.使用UTF-8对其进行编码,并添加描述编码的元标记:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Run Code Online (Sandbox Code Playgroud)


Mik*_* A. 5

我们有一个 PHP 函数,它试图用智能引号清理混乱。这有点混乱,因为随着原型开发过程中出现的案例,它有点有机地增长。不过,这可能会有所帮助:

function convert_smart_quotes($string) {
    $search = array(chr(0xe2) . chr(0x80) . chr(0x98),
                    chr(0xe2) . chr(0x80) . chr(0x99),
                    chr(0xe2) . chr(0x80) . chr(0x9c),
                    chr(0xe2) . chr(0x80) . chr(0x9d),
                    chr(0xe2) . chr(0x80) . chr(0x93),
                    chr(0xe2) . chr(0x80) . chr(0x94),
                    chr(226) . chr(128) . chr(153),
                    '’','“','â€<9d>','â€"','  ');

     $replace = array("'","'",'"','"',' - ',' - ',"'","'",'"','"',' - ',' ');

    return str_replace($search, $replace, $string);
}
Run Code Online (Sandbox Code Playgroud)

  • 我自己已经这样做了,但我认为这是一个坏主意。如果您有一个文本过程或任何其他类型的过程会损坏您的数据,请修复该过程以使其不会损坏数据,不要只是对输出进行零碎的更正。 (4认同)
  • 是的——五年后。我在维护现有代码时偶然发现了这一点。我知道 Word 等程序的剪切/粘贴问题,但要在其上备份@mike-a,有时您无法控制信息源,并且必须对数据流采取标准化方法。我使用了这个,并为“(我拥有的第一级子弹)添加了一个”。 (2认同)