0

我使用的是公共api,YQL,特别是它返回一个json,并且在这个josn中有一个字段是汉字。通过直接调用这个 api url,我可以在浏览器中查看 json,它确实以 json 形式在浏览器中显示中文字符(这意味着它被正确解码并且我想是可读的)

现在,在php中,我通过curl调用这个相同的api url(它应该返回与我直接在浏览器中调用它相同的json)

$session = curl_init($yql_query_url);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$yql_json = curl_exec($session);

我通过php以以下格式打印返回的json

print_r($yql_json . "\n\n");
print_r(utf8_decode($yql_json) . "\n\n");

它分别返回以下内容,

{"query":{"count":2,"created":"2012-08-19T07:24:51Z","lang":"en-US","results":{"h1":{"class":"entry-title","content":"康熙來了 2012-06-21 女å­ç†è²¡ä¾¿æ˜¯å¾·?!"}}}}


{"query":{"count":2,"created":"2012-08-19T07:24:51Z","lang":"en-US","results":{"h1":{"class":"entry-title","content":"???? 2012-06-21 ????????!"}}}}

如您所见,中文字符不显示(在“内容”之后)

我的目标是最终获取内容字段(中文字符)并插入数据库,但显然上面的示例似乎不是正确的中文值插入或 utf-8 编码

基本上我还要问的是,我怎样才能在上面的打印语句中显示中文字符,因为如果我能做到这一点,这意味着我有正确的 utf-8 编码插入数据库。

请帮忙

我想我的问题是:1.哪个打印语句有正确的信息让我插入数据库?

编辑:

答案之一建议我应该插入 utf8_decode 版本(上面有 ?? 和 !! 的那个)

我用下面的代码做到了

$sql = "UPDATE myTable SET title='" . utf8_decode($yql_json_php["query"]["results"["h1"["content"]) . "' WHERE id='4'";
mysql_query("set names 'utf8'");
$result = mysql_query($sql);

我刷新了我的页面,但它仍然显示为?? 和 !!

我通过sequel pro应用程序将汉字直接粘贴到表格中,我可以在我的网页上显示数据

所以它与我拥有的UPDATE sql有关......数据库似乎不知道它是utf8

4

3 回答 3

0

尝试使用

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

或者

<?php header("Content-type: text/html; charset=utf-8");?>

可能这会对你有所帮助。

于 2012-08-19T07:43:43.153 回答
0

我遇到了类似的问题。基本上你得到了汉字。但是,当您打印它或将其存储在数据库中时,它们可能会显示为“?????” . 当你再次检索它并在浏览器中显示它时,你可以看到汉字。摆脱“???” 在数据库中,您必须在数据库 url 中定义 characterEncoding 并将 character_set_result 和其他一些设置为 utf8。同时,如果您调试您的应用程序并在 watch 上查看 content 的值,您实际上会看到中文字符。让我知道这是否有帮助。

于 2012-08-19T07:46:52.463 回答
0
  1. $yql_json = iconv(in_charset, 'utf-8', $yql_json);

  2. header("内容类型: text/html; charset=utf-8");

  3. 网页视图编码 -> utf-8

于 2012-08-19T07:54:07.617 回答