我正在研究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)
答案 0 :(得分:1)
有点奇怪,但它可能与数据库没有给你UTF8字符串(json_decode需要)。
尝试
mysql_query("SET NAMES 'utf8';");
在实际查询之前。
//编辑: 换行实际上是导致问题的原因。尝试使用json验证器:http://jsonlint.com/
答案 1 :(得分:1)
尝试在utf8中获取它。
来自json_decode doc(此函数仅适用于UTF-8编码数据。)
答案 2 :(得分: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
)。