Php Word paste的Textarea输入在MySQL中存储为无意义

Php Word paste的Textarea输入在MySQL中存储为无意义,php,mysql,encoding,utf-8,ms-word,Php,Mysql,Encoding,Utf 8,Ms Word,我已经试着找到这个问题的答案,我感觉它与编码有关,但在多次尝试后,我认为在这里提问没有成功。对不起,如果是重复的 我有一个textarea输入字段存储在MySQL文本列中。当文本直接输入到文本区域时,它存储并显示良好。当它被输入Word,然后复制粘贴(我的用户坚持这样做),它会将撇号和双引号变成: ' is displayed as ’ " is displayed as “ " is displayed as †然而,我确信这是一个编码问题,因为如果我从命令行发出select语句

我已经试着找到这个问题的答案,我感觉它与编码有关,但在多次尝试后,我认为在这里提问没有成功。对不起,如果是重复的

我有一个textarea输入字段存储在MySQL文本列中。当文本直接输入到文本区域时,它存储并显示良好。当它被输入Word,然后复制粘贴(我的用户坚持这样做),它会将撇号和双引号变成:

' is displayed as ’
" is displayed as “
" is displayed as â€
然而,我确信这是一个编码问题,因为如果我从命令行发出select语句,它会显示良好。只有当我通过web(phpMyAdmin或通过我的实际应用程序)查看数据时,数据才会乱七八糟

我试过这个:

$output = str_replace("’","'",$input);

等等,但没有效果。我下载了Encoding::toUTF8(在中提到),它成功地替换了有问题的字符串,但不加区分地替换为问号,而不是原始字符串


我有点像是在黑暗中摸索,如果有人给我指点,我会很感激的

实际上,问题不是在PHP中发生的,而是在JavaScript中发生的,这是由于从Word复制/粘贴所致,因此在将文本传递到PHP之前,您需要用JavaScript解决问题:

//用ISO-8859-1同源词替换ASCII或ISO-8859-1中不存在的常用Windows 1252编码字符。
var replaceWordChars=函数(文本){
var s=文本;
//巧妙的单引号和撇号
s=s.replace(/[\u2018 |\u2019 |\u201A]/g,“\”);
//聪明的双引号
s=s.replace(/[\u201C|\u201D|\u201E]/g,“\”);
//省略号
s=s。替换(/\u2026/g,“…”);
//破折号
s=s.替换(/[\u2013 |\u2014]/g,“-”;
//回旋
s=s.替换(/\u02C6/g,“^”);
//开角支架
s=s。替换(/\u2039/g,“”);
//空间
s=s.替换(/[\u02DC |\u00A0]/g,”);
返回s;
}
//使用类似于:
var newText=replaceWordChars(textToCheck);
和问题相关但不相同:它专门询问如何将智能引号转换为“普通”(即Ascii)引号,将em短划线转换为“常规短划线”(即Ascii连字符);而被接受的答案只是一个普通教程的参考。很难看到那里真正问了什么,这里真正问了什么。应该正确处理“智能”字符,还是将其转换为枯燥的Ascii?问题究竟是如何产生的?
$output = str_replace("\â\€\™","\'",$input);