0

我已经编写了数据抓取引擎,它(到目前为止)一切正常,除了它在文本中出现欧元符号的位置完全停止数据插入过程。我相信这个符号可能不是唯一的。

如果即将插入数据库表的字符串如下所示:

Quick brown € fox jumped over the laizy dog.

这将最终在数据库中:

Quick brown 

我的麻烦是我已经按照这个网站上找到的几个关于这个问题的说明,没有运气。

我已经做了什么来解决这个问题(php端):

确保:

mysqli_set_charset($dblink, "utf8");
mysqli_real_escape_string($dblink, $string);

尝试过:

iconv('windows-1250','utf8//TRANSLIT', $string );
iconv('windows-1250','utf8', $string );/*crawled web page declared windows-1250 characterset*/

(在这里我成功完成了保留€符号的数据插入,但是其他拉丁字符 čćšđž 完全降级了)

  • 其他几个尝试mb_convert_encoding()
  • 尝试使用 ofAcceptAccept-Charsetheaders更改服务器响应

mysql端:

表和字段设置为 utf8_unicode_ci

尝试修复DEFAULT CHARACTER SET为 utf8(对现有的非空数据库进行了修复)

没有成功。无论我尝试什么,插入过程都会以 € 符号停止。

有谁知道我该怎么办?

4

2 回答 2

1

我已经在我的 php/mysql 安装上测试了这些,并且都可以工作。请注意,由于我的字符编码不支持它,我无法让欧元在我的命令行上工作,所以我首先从一个运行良好的数据库中选择了它。

$original = 'Quick brown '.$euro.' fox jumped over the laizy dog.';
$escaped =  str_replace($euro,'\\'.$euro,$original);
echo $escaped;
$database->insertSQL('insert into test (text) values (\''.$original.'\')');
$database->insertSQL('insert into test (text) values (\''.$escaped.'\')');

原始和转义都正确插入到我的数据库中,并且转义没有反斜杠,因为 SQL 知道如何处理它。

我能想到的唯一可能与您的数据库不正确的是编码。我的编码是 latin1_swedish_ci。如果您更改表上的编码,我上面的代码块有帮助吗?

于 2013-02-28T21:53:40.397 回答
-1

这些字符是多字节的。因此,当您将其放入 var đ 时,它有点像 %71%41 或类似的东西。那是您出现问题的地方。

让我知道您是否需要更详细的帮助 Miloše :)

于 2013-02-28T21:14:44.267 回答