PHP utf8_decode没有为MySQL中的“â”等字符返回任何内容

时间:2017-01-06 21:23:07

标签: php mysql encoding utf-8

我的SQL数据库中有一些行存在问题。数据库中存在具有以下字符的列的行:

  

Macyâ¢Â¢â€œ购买1&我们将捐出1¢......

我已经知道当我将这些行插入表格时,我搞砸了。我有一个.csv文件,其中包含许多行,其中包含UTF-8字符,这些字符是通过抓取几个网页来填充的。 我知道我不应该使用utf8_decode来解码来自MySQL的数据,并且当我将数据插入表格时我应该有正确的编码。但是,重新抓取数据并重新插入数据会带来很大的不便,所以我现在正在寻找这个解决方案。

当我尝试使用utf8_decode($row["description"]),其中$row["description"]是上面的字符串时,输出什么都没有,我收到错误。我的代码看起来像这样:

$events[] = array(
     'description' => utf8_decode($row['description']),
     // some other fields...
);

当我尝试将php数组回显到这样的javascript:

var events = <?php echo json_encode($events); ?>;

我收到一条错误消息,指出控制台中未定义events

问题是这只发生在少数几个查询中,我可以回复utf8_decode的结果而没有错误。

我的意思是我在表格中有相似(如果不相同)字符的行:

  

New Chipotleâ€〜GuacHunter’体验重新...

当我utf8_decode字符串时,它很好地出现了:

  

New Chipotle'Guac Hunter'体验奖励玩家免费筹码和鳄梨酱

我还尝试回显utf8_decode($ row [“description”]),这些选择查询没有返回任何内容,看看会发生什么。已解码的字符串正确回显到页面。所有奇怪的角色都被人类可读的角色所取代。我将$events[]数组的description属性更改为$row["description"]并添加了此内容:

 echo utf8_decode($row["description"]);

enter image description here

这是当我回显行的utf8_decode d版本时输出的样子。上半部分是解码版本,在正确显示撇号时正确解码。但是,在下半部分,您可以看到撇号被奇怪的a-hat字符替换。

这让我更加困惑 - 为什么我可以回复utf8_decoded$row["description"]但不能将其放入数组中?

1 个答案:

答案 0 :(得分:0)

我通过在 角色上执行preg_replace解决了这个问题。看起来这是输出的唯一问题。