【发布时间】:2016-05-06 20:02:29
【问题描述】:
我一直在向我的数据库中插入一些外国名称,我意识到我需要从标准的拉丁语/瑞典语更改为 UTF-8。我实际上将其全部更改为 utf8mb4_general_ci。它现在可以正确显示字符,但我遇到了一个小问题。从文本文件(以 utf-8 编码)中检索代码时,它会正确获取代码(例如 FO),但在将其保存到数据库后,它现在显示为 \r\nFO。我不确定这些额外字符是从哪里提取的,但我认为不是来自文件。
我在转换过程中是否做错了什么,我需要在保存之前对字符串做些什么,还是与我将它保存到数据库的方式有关?
我知道关于这个问题有很多主题,包括 SO,但是有很多,我还没有找到与这个特定问题相关的主题。
一些编辑...。我在 Notepad++ 中打开了“显示所有符号”,并且 CR LF 在行尾正确显示。
插入数据库的代码是...
$query = $db->prepare("INSERT INTO players
(Name, DetailsJSON)
VALUES (:Name, :NewDetails)");
$query->bindParam(':Name', $this->Name, PDO::PARAM_STR);
$query->bindParam(':NewDetails', $this->DetailsJSON, PDO::PARAM_STR);
$query->execute();
$this->ID = $db->lastInsertID();
【问题讨论】:
-
\r\n看起来像是一个严重转义的 Windows 回车/换行 -
插入 var_dump($this->Name);var_dump($this->DetailsJSON);查询前。这会告诉你……一切。必须有换行符或'\r\n'
-
酷,var_dump 确实显示了它,它在查询之前就已经存在了。我会尝试使用 var_dump 更早地追踪它,并找出它何时被拾取。
-
别忘了 trim()
-
Trim 至少已将其删除,但也许我应该 var_dump 进一步回溯以找出它的来源。谢谢。