【问题标题】:Issue with space encoding with PHP and SQLPHP 和 SQL 的空间编码问题
【发布时间】:2017-08-30 11:15:15
【问题描述】:

所以我有一个 Excel 表,我保存为 CSV 并编码为 UTF-8 并带有网络选项。当我最初这样做时,它显示了很多我删除的重音字母,这很奇怪,因为内容是一个非常简单的语言列表。我已经删除了所有这些字符并使用带有LOAD DATAutf8 字符集的CSV 导入SQL。我已经运行了查询'SET NAMES utf8',并且在phpmyadmin 的操作菜单中将我的数据库排序规则更改为utf8_general_ci。我已经设置了

<meta charset="utf-8"/>

在我的网页顶部,我已经设置了

<?php echo utf8_encode($row['lang']); ?>

在我的网页中回显一串语言。

我得到的是一个从 div 容器中出来的列表。我发现有些空格似乎可以换行,而有些则不能,因此浏览器似乎认为列表是一个长单词,而不是几个分开的。有人有什么想法吗?

示例数据:“英语、西班牙语、法语、俄语”

【问题讨论】:

  • 抱歉,您的“示例数据”一点用都没有,而且您的问题描述也不清楚。建议您首先在 HEX 编辑器中打开 CSV,查看您在相关位置实际处理的字节值。
  • mysqls "utf8" 也不是真正的 utf-8,而是一个 3 字节的版本。字符集真的很烦人,将元标记设置为 utf-8 可能还不够,在 http 标头中设置字符集可能会有所帮助。另外,如果您从数据库中读取数据为 utf-8,则不需要再次对其进行 utf8_encode 编码,有些可疑,请找出在哪里!
  • @Jakumi 有趣的是,当我删除 utf8_encode() 函数时,我将空格替换为带问号的菱形。空间问题仍然存在。听起来与这篇文章非常相似:stackoverflow.com/questions/7262687/… 但我的技术还不够了解如何解决它
  • 删除重音字母(可能是 Mojibake)已经破坏了内容。可能是进程的某些部分未能指定 utf8。

标签: php mysql utf-8


【解决方案1】:

目前,您的问题描述不足以重现您的问题。

不过,我会建议一个在大多数情况下都有效的通用方法来查明问题:

0。在输出中找到一个编码奇怪/奇怪/错误的示例

在以下步骤中使用此示例,以确定问题所在。

1。文件中的数据是否正确?

打开文本文件,看看是否有一些奇怪的字符。如果有,那可能是你的问题。修复它。

2。数据库中的数据是否正确?

使用 phpmyadmin 或其他一些不会与编码混淆的工具打开您的数据库以显示误导性内容。检查是否有奇数字符。如果有,您的导入或表/数据库的字符集/排序规则是错误的。修复它。

3。 http 标头中的字符集是否正确?

使用您的浏览器开发工具查找响应的字符集。还可以使用视图 -> 文本编码(这将在 firefox 中,在其他浏览器中类似)菜单选项来确定当您切换到 utf-8 时是否发生了变化。这通常意味着标头编码与整个有效负载的编码不匹配。设置 http 标头和元标记(通常被忽略)字符集可能会有所帮助。

4。确保一致的数据编码

php 脚本文件和 db 查询返回的数据 应该 具有相同的编码(最好是 utf-8),尤其是在输出 php 文件中的文字字符串或其他文件时输出不同的编码。在某些情况下,这并不是很容易确定。但可能有一些iconv 恶作剧会对此有所了解,file -i 也会帮助确定脚本文件的编码。

如果这一切都井井有条,我就没有主意了。如果您在理解部分或全部这些部分时遇到问题……您应该阅读或请其他人这样做。

【讨论】:

  • 好的,非常感谢您的回复。所以我发现我的文件是 UTF-8 格式的,当我把它切换到 ANSI 时,我发现这些小“虫子”出现了。我很确定这些是弄乱我的文字的原因。当我找到它们并将它们全部替换为空值时,我切换回 UTF-8,现在它们是小“xAO”。当我导入 SQL 时,我导入为 UTF-8,我的排序规则为 UTF-8,但我可以在数据库中看到 'Â's 仍然存在,这意味着它作为 ANSI 导入,我猜。摆脱它们的最佳方法是什么?
  • 我希望使用明智的编辑器?我相信有 bash/awk/whatever 脚本可以删除非 ascii 字符,如果您的文件打算仅是 ascii。
  • Notepad++,好的,谢谢,我会调查一下,告诉你进展如何
  • 得了! stackoverflow.com/questions/8781911/… 不知何故,空格是一个特殊字符,而简短的 preg_replace 公式有效地删除了它并用你想要的任何东西替换它,在我的例子中是空格!真的很高兴感谢您为我指明了正确的方向,尽管我的解释很糟糕!
猜你喜欢
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
相关资源
最近更新 更多