0

我正在努力facebook app。我已经以 json 格式在数据库中存储了一些值。

当我在目标页面上获取值并尝试显示如下值时:

$sql = mysql_query("select * from `beforepublish` where `tabid` = '$page_id'") or die(mysql_error());
$sql = mysql_fetch_assoc($sql);

$contest_id = $sql['contestid'];
$temp_id = $sql["tempid"];
$value = $sql["values"];
$returnValue = json_decode($value);
echo "<pre>";
print_r($returnValue);
echo "</pre>";

这里的值

$value = {"image":"upload_1182341221.jpg","conttxt":"Get a chance to win Samsung Galaxy Tab "}

我越来越$returnValue空白。

但是当我尝试时:

$returnValue = json_decode('{"image":"upload_1182341221.jpg","conttxt":"Get a chance to win Samsung Galaxy Tab "}');
echo "<pre>";
print_r($returnValue);
echo "</pre>";

然后 $returnValue 正在返回:

stdClass Object
(
    [image] => upload_1182341221.jpg
    [conttxt] => Get a chance to win Samsung Galaxy Tab 
)

所以伙计们,请帮助我,为什么我在前一个案例中得到一个空白值?

编辑

vardump($value) 正在返回:

string '{"image":"upload_1182341221.jpg","conttxt":"Get a chance to win Samsung Galaxy Tab
    "}' (length=86)
4

3 回答 3

1

尝试在 utf8 中获取它。

来自 json_decode 文档(此函数仅适用于 UTF-8 编码数据。)

于 2013-08-28T12:52:32.467 回答
1

有点奇怪,但这可能与数据库没有给你 UTF8 字符串(json_decode 需要)有关。

尝试

mysql_query("SET NAMES 'utf8';");

在您的实际查询之前。

//edit:换行符实际上是导致问题的原因。尝试使用 json 验证器:http: //jsonlint.com/

于 2013-08-28T12:51:40.150 回答
0
string '{"image":"upload_1182341221.jpg","conttxt":"Get a chance to win Samsung Galaxy Tab
    "}' (length=86)

有你的问题。那个换行符和制表符。它应该看起来像:

string '{"image":"upload_1182341221.jpg","conttxt":"Get a chance to win Samsung Galaxy Tab"}' (length=84)

这就是var_dump()输出长度的原因,因此您可以针对任何不需要/不可见的字符进行验证。


您可以将 javascript 字符串中的换行符存储为\n.
json_encode()会自动执行此操作。

这适用于所有转义序列(常用的是、\n\r)。\t\b

于 2013-08-28T12:59:35.300 回答