【问题标题】:Text encoding in HTML text fieldsHTML 文本字段中的文本编码
【发布时间】:2010-05-19 20:46:23
【问题描述】:

我有一个网站,上面有一个表格。表单 POST 到 php 脚本,然后将数据插入我的数据库。该页面在 标记中有一个 charset=UTF-8 属性,并且数据库设置为使用 UTF-8。但是,当我将 MS Word 中的字符复制并粘贴到字段中时,输出会变得混乱。

例如,

中的引号

我正在使用“Microsoft Word”''''

成为

我正在使用“Microsoft Word”????

在数据库中。

有人知道为什么会发生这种情况吗?

【问题讨论】:

    标签: php html encoding


    【解决方案1】:

    这是我建议您找出问题所在的方法。

    1. MySQL 默认使用字符集 Latin1 来存储和传入/传出数据。要更改它,请执行以下操作。使用字符集 UTF8/collat​​ion utf8_unicode_ci 创建您的数据库(请参阅http://dev.mysql.com/doc/refman/5.0/en/create-database.html)。

      CREATE DATABASE example DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci;

    2. 告诉 MySQL 以 UTF8 处理输入/输出数据。在将任何 SQL 查询发送到 MySQL 之前,命令 SET NAMES UTF8;必须制作。这告诉 MySQL 以 UTF8 格式接受和处理服务器的所有输入/输出数据。每个连接只需设置一次。例如,您可以使用mysql_query("SET NAMES 'UTF8'"); 进行设置。

    3. 确保您实际使用的是 UTF8。尽管您可能已经在 <meta> 标记中指定了 UTF8,但实际上您可能正在以另一个字符集发送内容。为确保您发送的是 UTF8 编码的内容,请将 header('Content-Type: text/html; charset=utf-8'); 添加到您的 PHP 文件中。

    【讨论】:

      【解决方案2】:

      运行 set names utf8 查询并摆脱代码中的所有重新编码功能

      【讨论】:

        【解决方案3】:

        不是一个真正的答案,而是一个建议。首先尝试奶奶(30 秒)测试:将您要复制的 MS Word 文本粘贴到一个好的文本编辑器(如 editpad pro 或 notepad++)中,如果一切正常,请再次从那里复制它并粘贴它在您的表单中。

        换句话说,不要直接从 MS WORD 复制和粘贴文本。

        【讨论】:

          【解决方案4】:

          我有一个简单的 java webapp,它没有在任何地方指定任何字符集或编码,并且遇到了同样的问题。就我而言,以下更改产生了所需的行为:

          1. 将 db 架构定义更改为使用 UTF-8(使用 MySQL)。
          2. 更改 db 连接器 URL 以在连接 URL 中指定 UTF-8(使用 MySQL 连接器-J)
          3. 更改应用服务器配置以将请求参数数据解释为 UTF-8。
          4. 更改所有生成的 HTML 页面以指定 UTF-8。

          【讨论】:

            【解决方案5】:

            您是从 <textarea> 还是 WYSIWYG 表单发帖? WYSIWYG JavaScript 可以进行自己的编码。

            您是否在不同的浏览器中尝试过?这可能是特定浏览器的错误。另外,请尝试在 PHP 中设置标头,而不是使用元标记,因为您的服务器可能会发送冲突的标头。

            header('Content-Type: text/html; charset=utf-8'); 
            

            如果将 $_POST 数据保存到文件中会发生什么?编码看起来OK吗?

            file_put_contents('post.log', print_r($_POST, true));
            

            那么,如果你将 Word 中的文本复制到一个文本文件中并将文件的内容插入到数据库中会发生什么?

            $db_query = 'INSERT INTO table SET col="' . mysql_real_escape_string(file_get_contents('input.txt')) . '"';
            

            【讨论】:

              【解决方案6】:

              试试

              <form action="form_action.php" accept-charset="UTF-8">
              

              【讨论】:

                猜你喜欢
                • 2014-01-06
                • 1970-01-01
                • 1970-01-01
                • 2015-12-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-10-01
                • 1970-01-01
                相关资源
                最近更新 更多