【问题标题】:Strange character appearing in text in mysqlmysql中文本中出现的奇怪字符
【发布时间】:2014-03-21 17:48:04
【问题描述】:

在 VARCHAR 和 TEXT MySQL 数据库数据类型中,从 HTML TEXTAREA 字段插入或更新内容后,我不断看到字符出现在每个空格之前。

当我在插入/更新之前对 PHP 数据进行 vardump 时, 字符不存在。

我尝试将数据库和表从 latin1_swedish_ci 的默认排序规则转换为 utf8_general_ci 编码,然后再次插入/更新数据,但 Â 字符仍然出现在每个空格之前的文本中。

老实说,我对排序规则和字符编码没有很好的掌握,并认为默认情况下会很好,但后来我遇到了这个问题。如何防止出现这些多余的字符?

[编辑]:如果我第一次将文本更新到数据库,多余的字符不会出现。如果我从数据库字段中加载文本,然后再次更新它,则会出现 Â 字符。

【问题讨论】:

  • 您没有将此文本视为 UTF-8。可能是 ISO-8859-1?
  • 排序规则与此无关。排序规则基本上是“字母顺序”,并确定例如德语 ringel-s 是排在 B 之后还是 S 之后。
  • UTF-8 从 A-Z 一路
  • 你应该检查的是你收到的数据是否是你期望的编码(在发布表单时检查浏览器编码),并检查返回的数据是否被浏览器视为在 UTF-8 中(再次:浏览器编码)
  • @Tularis,每个排序规则都有一个默认字符集,很多人使用 PHPMyAdmin 通过设置排序规则来设置字符集。

标签: php html mysql encoding character-encoding


【解决方案1】:

尝试在数据库初始化时执行SET NAMES 'utf8'。还要检查 PHP 文件的编码。

【讨论】:

  • 我做了一些快速阅读,似乎有很多关于不使用SET NAMES的帖子。它实际上是做什么的? PHP 文件默认为 cp1252。
  • 哈哈!看来我知道问题出在哪里了。带有表单字段的页面是 cp1252,但库 PHP 文件是 UTF-8。当我使用该库中的函数时,多余的字符似乎已进入字符串。
  • 再说一次,也许不是。我还在看人物。叹息。
【解决方案2】:

我认为您可能在 text/html 中有一些隐藏的非 ascii。也许你应该尝试使用

$text= str_replace('`', "'", $text);
$text= preg_replace("/[^(\x20-\x7F)]*/",' ', $text);

在将非 ascii 字符插入数据库之前去除它。

【讨论】:

  • 这不会去除“所有非ASCII文本”,这仅会去除\xA0,这是一个单一的字符。存在数十亿个其他非 ascii 字符(并且经常使用!)
  • 但据我所知,PHP 方面没有特殊字符。当我尝试这个时,它去掉了空格(反过来,去掉了 Â 字符)。我不确定为什么突然需要这种方法。我不想去掉标点符号、键盘符号或空格。
  • 当您从 MS Word 等文本编辑器或包含此类字符的网页复制内容到文本字段时,通常会发生这种情况
  • 我不会从任何地方复制内容。我只是在 TEXTAREA 字段中输入。
【解决方案3】:

事实证明,我用来生成输入/文本区域字段的 PHP 库存在问题。对于 textarea 字段,它用 nbsp 特殊字符替换值中的所有空格。因此,在将该值存储和重新存储到数据库时,事情变得有些不稳定。我禁用了该功能。

感谢大家抽出宝贵时间提出建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多