我的网站上有一个表单。表单POST到php脚本,然后将数据插入到我的数据库中。该页面在< meta>中具有charset = UTF-8属性。标记,数据库设置为使用UTF-8。但是,当我将字符从MS Word复制并粘贴到字段中时,输出会混乱。
例如,
中的引号我正在使用“Microsoft Word”''''
成为
我正在使用“Microsoft Word”
在数据库中。
任何人都知道为什么会这样?
答案 0 :(得分:2)
我建议你这样做,找出问题所在。
MySQL使用charset Latin1 来默认存储和传输数据。要更改它,请执行以下操作。使用charset UTF8 / collation 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;
告诉MySQL以UTF8的形式处理输入/输出数据。在将任何SQL查询发送到MySQL之前,命令SET NAMES UTF8;必须做。这告诉MySQL接受并以UTF8的形式处理服务器的所有输入/输出数据。这需要每个连接只设置一次。例如,您可以使用mysql_query("SET NAMES 'UTF8'");
进行设置。
确保您实际使用的是UTF8。尽管您可能在<meta>
标记中指定了UTF8,但实际上您可能正在另一个字符集中发送内容。要确保您发送UTF8编码的内容,请将header('Content-Type: text/html; charset=utf-8');
添加到您的PHP文件中。
答案 1 :(得分:0)
运行set names utf8
查询并删除代码中的所有重新编码功能
答案 2 :(得分:0)
不是一个真正的答案,而是一个建议。首先尝试奶奶(30秒)测试:将要复制的MS Word文本粘贴到一个好的文本编辑器,如editpad pro或notepad ++,如果所有内容都显示为预期复制它再次从那里并粘贴它在你的表格内。
换句话说,不要直接从MS WORD复制和浏览文本。
答案 3 :(得分:0)
我有一个简单的java webapp,它没有在任何地方指定任何字符集或编码,并遇到同样的问题。在我的例子中,以下更改产生了所需的行为:
答案 4 :(得分:0)
您是从<textarea>
还是WYSIWYG表单发布的? WYSIWYG JavaScript可以进行自己的编码。
您是否在不同的浏览器中尝试过?它可能是特定浏览器的错误。此外,尝试在PHP中设置标头,而不是使用元标记,因为您的服务器可能正在发送冲突的标头。
header('Content-Type: text/html; charset=utf-8');
如果将$ _POST数据保存到文件会怎样?编码看起来不错吗?
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')) . '"';
答案 5 :(得分:0)
试
<form action="form_action.php" accept-charset="UTF-8">