如何正确编码链接到JSON?

时间:2013-03-01 22:32:46

标签: php json

有人可以帮我编写JSON语法链接到php字符串变量吗? 要编码的网址(链接包含像é这样的匈牙利字符):

<a href='http://www.szerelmifajdalomklinika.hu/kapcsolati-kerdoiv/?partner_id=100'>Kérdőív kitöltése</a>

它与以下php代码一起使用:

$user_survey='"\u003ca href=\"http://www.szerelmifajdalomklinika.hu/kapcsolati-kerdoiv/?partner_id=100\"\u003eKérdőív kitöltése\u003c/a\u003e"';

echo json_encode(array(
        'user_id' => $user_id,
    'partner_id' => mysql_insert_id(),
    'partner_nickname' => $partner_nickname,
    'partner_description' => $partner_description,
    'real_partner_id' => $real_partner_id,
    'partner_survey' => $user_survey
));

?>

它在其他地方提供表格内容。由于链接或实际上任何文本都没有出现在合作伙伴调查部分中,因此运行不正常。

请注意,上面的代码适用于简单的字符串,例如$partner_survey="test";$partner_survey="test with some hun chars: ééóóúúűű";正确运行。

以下链接用于生成和验证编码: http://edtracks.com/toolkit/decoder-encoder-json-html-url/

http://json.parser.online.fr/

1 个答案:

答案 0 :(得分:2)

JSON要求字符串采用UTF8编码。我个人使用这些功能:

function getjson($json) {
    $j = json_decode($json,true);
    if( !$j) $j = Array();
    array_walk_recursive($j,function(&$a) {if(is_string($a)) $a = utf8_decode($a);});
    return $j;
}
function setjson($json) {
    array_walk_recursive($json,function(&$a) {if(is_string($a)) $a = utf8_encode($a);});
    $j = json_encode($json);
    return $j;
}

虽然您应该注意到这些特别针对JSON编码的数组。他们会为这个特殊情况工作,但请记住这一点以便更广泛地使用。

旁注:您可以按如下方式确定UTF8是否存在问题:

// after attempting to json_encode data:
if( json_last_error() == JSON_ERROR_UTF8) echo "ERROR: Invalid encoding";