【问题标题】:PHP CSV import getting strange charators [duplicate]PHP CSV导入得到奇怪的字符[重复]
【发布时间】:2017-01-09 16:25:58
【问题描述】:

我正在尝试使用 PHP to MySQL 导入产品 csv。当我尝试导入时,我得到了一些奇怪的字符,这些字符也没有正确添加到 database table

Product Name on CSV File

Alva Cook'on Braadpan Lavendelblauw ovaal 24 cm – 4,2 升

导入函数执行时得到的产品名称

Alva Cook'on Braadpan Lavendelblauw ovaal 24 厘米 - 4.2 升

我的代码是这样的

while (($emapData = fgetcsv($filepath, 10000, ",")) !== FALSE)
{
    $pd_name=  ($emapData[1]);
}

我使用此功能作为解决方案,在导入页面上正确显示产品名称

$pd_name=mb_convert_encoding(($emapData[1]), 'UCS-2LE', 'UTF-8');

Output ~ Alva Cook'on Braadpan Lavendelblauw ovaal 24 cm – 4,2 Liter

但是当我使用mysql_real_escape_string 如下将名称插入数据库表时,它添加了很多slashes 并且无法正常工作。

$pd_name=mysql_real_escape_string(mb_convert_encoding(($emapData[1]), 'UCS-2LE', 'UTF-8'));


Output ~ A\0l\0v\0a\0 \0C\0o\0o\0k\0\'\0o\0n\0 \0B\0r\0a\0a\0d\0p\0a\0n\0 \0L\0a\0v\0e\0n\0d\0e\0l\0b\0l\0a\0u\0w\0 \0o\0v\0a\0a\0l\0 \02\04\0 \0c\0m\0 \0 \04\0,\02\0 \0L\0i\0t\0e\0r\0

SQL database table 支持UTF,当我们正常使用表单添加产品时,我们不会遇到这个问题,任何人都知道如何解决这个问题。谢谢你

【问题讨论】:

  • 使用 utf8_encode();希望它会工作
  • 您需要在整个渲染链中使用相同的字符集。 PHP 本身与字符串的字符集无关。字符串是一个字符串,包含一堆字节。这些字节代表的内容与 PHP 本身无关。当您开始处理该字符串时,实际的表示很重要。如果您在执行过程中转换为 utf-8,但没有告诉输出/显示环境期待 UTF,那么您将得到“损坏”的字符。
  • @KamleshGupta 它不起作用,伙计
  • @abra 我不知道为什么这是重复的,因为我可以在网站上正确显示输出但我无法使用我的 sql 保存它,这个问题没有正确的答案
  • @MarcB 你知道 mysql_real_escape_string(mb_convert_encoding(($emapData[1]), 'UCS-2LE', 'UTF-8'));拜托,因为没有 mysql_real_escape_string 它工作得很好,但我需要添加 mysql_real_escape_string 来转义'字符

标签: php mysql fgetcsv csv-import


【解决方案1】:

您应该从函数mysql_real_escape_string 已被弃用的事实开始:

警告 此扩展在 PHP 5.5.0 中被弃用,并在 PHP 7.0.0 中被删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南和相关的常见问题解答以获取更多信息。此功能的替代方案包括: mysqli_real_escape_string() PDO::quote()

那么你应该将mysqli_real_escape stringmysqli_set_charset结合使用

PHP 官方文档:

【讨论】:

  • 网站有数百个mysql功能。所以我没有时间找到并将这些都转换为mysqli,我们稍后会考虑,无论如何这会解决问题吗?
猜你喜欢
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 2010-09-05
  • 1970-01-01
相关资源
最近更新 更多