当前位置: 首页 > 知识库问答 >
问题:

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

何麻雀
2023-03-14

我已经试着找到了答案,我觉得这与编码有关,但在多次尝试后,我都没有成功,我想在这里提问。抱歉,如果是重复的。

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

' is displayed as ’
" is displayed as “
" is displayed as â€

但是,我确信这是一个编码问题,因为如果我从命令行发出选择语句,它显示良好。只有当我通过网络(phpMyAdmin或通过我的实际应用程序)查看数据时,它才会混乱。

我试过这个:

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

$output = str_replace("\â\€\™","\'",$input);

等等。但是没有效果。我下载了编码::toUTF8(在检测编码和使一切UTF-8中提到),它设法替换有问题的字符串,但不分青红皂白地变成问号,而不是原件。

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

共有1个答案

何烨华
2023-03-14

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

// Replaces commonly-used Windows 1252 encoded chars that do not exist in ASCII or ISO-8859-1 with ISO-8859-1 cognates.
var replaceWordChars = function(text) {
    var s = text;
    // smart single quotes and apostrophe
    s = s.replace(/[\u2018|\u2019|\u201A]/g, "\'");
    // smart double quotes
    s = s.replace(/[\u201C|\u201D|\u201E]/g, "\"");
    // ellipsis
    s = s.replace(/\u2026/g, "...");
    // dashes
    s = s.replace(/[\u2013|\u2014]/g, "-");
    // circumflex
    s = s.replace(/\u02C6/g, "^");
    // open angle bracket
    s = s.replace(/\u2039/g, "<");
    // close angle bracket
    s = s.replace(/\u203A/g, ">");
    // spaces
    s = s.replace(/[\u02DC|\u00A0]/g, " ");

    return s;
}

//Use like:
var newText = replaceWordChars(textToCheck);
 类似资料:
  • 我正在制作一个基本的电影出租模拟器应用程序,我目前有一个问题,存储输入从我的文本字段和我的组合框到变量。我设法将大多数变量转换为字符串,但是当我试图打印输出以测试它时,它总是返回“null”。 我需要弄清楚如何从组合框中获取用户所做的选择并将其存储为字符串,我还需要弄清楚如何正确存储方法的结果。我以前从来没有遇到过这个问题,所以我真的不知道如何解决它。我的代码如下: 配子类型:

  • 问题内容: 我只是通过跟随有关Udemy的教学视频开始学习Go的,我尝试按如下方式打印当前时间 我得到一个很长的文本作为输出如下 我原本希望只在其后加上a ,这应该是结尾。预期的输出如下所示,也如本教程视频中所示。但是对我来说,结果的形式要长得多。 问题是,为什么同一个命令在教师的程序和我的程序之间返回不同的格式?为什么没有设置特定的格式,不应该返回一种格式? 问题答案: 问题是,为什么同一条命令

  • 这仅用于测试目的。 我正在尝试存储来自3个输入(类型:text、number)的数据,并将它们存储在localstorage中。每次提交都会连续递增。 我似乎在第二次提交时覆盖value0、value1、value2,而不是进一步增加到value3、value4、value5。 预期结果: 首先提交value0、value1、value2 第二次提交value3、value4、value5 第三次

  • Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象。 还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多(比pickle快1000倍)。你可以使用它们中的任一个,而我们在这里将使用cPickle模块。记住,我们把这两个模块都简称为p

  • 问题内容: 我在管理面板中使用ckeditor,但在用户提交表单中使用简单的文本框,因此用户可以输入文本并提交。问题是,当用户在带有换行符的textarea中输入文本时,它将另存为SQL。我想在sql中的每一行之后添加BR。 例如,用户提交: 已保存到数据库中,并在输出中显示下一行。但我想在数据库中另存为: 我使用nl2br,但不适用于用户提交表单。如果我在管理处理表单上使用nl2br,则在已经使

  • Berat有资格获得驾驶执照! Berat不能买酒! Berat的有效年龄:真 虽然,我优先考虑每个规则与突出关键字,“可以由酒精”规则仍然被解雇。它不应该被激发,因为在第一个规则中执行setValid(true),而在第二个规则中执行isValid()==false控件应该返回false,因此应该遗漏部分。