PHP: 斜杠转换为数组时变成 "V"
PHP: a slash becomes a "V" when converted to array
我有这个变量:$link = $rows['link'];
,其中包含一个 URL。
当我回应这个时,一切都很好。例如:
然后我想用下面的代码将这个URL保存在一个数组中:$result['video'][] = array('id' => $id, 'link' => $link);
这里的问题是斜线变成了 "V"。例如:echo json_encode($result);
给我:
{"video":[{"id":"1","link":"https://www.ted.com/talks/margaret_heffernan_why_it_s_time_to_forget_the_pecking_order_at_work"},{"id":"2","link":"https://www.ted.com/talks/simon_sinek_why_good_leaders_make_you_feel_safe"},{"id":"3","link":"https://www.ted.com/talks/regina_hartley_why_the_best_hire_might_not_have_the_perfect_resume"},{"id":"4","link":"https://www.ted.com/talks/sheryl_sandberg_why_we_have_too_few_women_leaders"},{"id":"5","link":"https://www.ted.com/talks/roselinde_torres_what_it_takes_to_be_a_great_leader"},{"id":"6","link":"https://www.ted.com/talks/stanley_mcchrystal#t-319307"},{"id":"7","link":"https://www.ted.com/talks/stanley_mcchrystal#t-319307"},{"id":"8","link":"https://www.ted.com/talks/stanley_mcchrystal#t-319307"},{"id":"9","link":"https://www.ted.com/talks/stanley_mcchrystal#t-319307"},{"id":"10","link":"https://www.ted.com/talks/stanley_mcchrystal#t-319307"}]}
有人知道它为什么这样做吗?
谢谢!! :)
你可以通过
解决这个问题
json_encode($result, JSON_UNESCAPED_SLASHES);
这不是问题,当您对任何包含“/”的字符串进行编码时,json 会自动添加一个反斜线字符“\”,最终的字符串将变成类似“\ /”的内容。这是完全合法的JSON。当您反序列化字符串时,“\ /”将自动转换为“/”。如果输出被适当的 JSON 解析器反序列化,为什么还要担心呢?
如果您坚持在输出中使用“\ /”,您可以在打印时使用 JSON_UNESCAPED_SLASHES
标志。
类似于:json_encode($eg_url, JSON_UNESCAPED_SLASHES);
<?php
/*
* @author Saurabh Pandey
* Escaping the reverse-solidus character ("/", slash) is optional in JSON.
*
* This can be controlled with the JSON_UNESCAPED_SLASHES flag constant in PHP.
*
*/
$eg_url = 'http://www.trillbit.com/';
echo json_encode($eg_url), "<br>";
echo json_encode($eg_url, JSON_UNESCAPED_SLASHES), "<br>";
输出:
http:\/\/www.trillbit.com\/
http://www.trillbit.com/
我有这个变量:$link = $rows['link'];
,其中包含一个 URL。
当我回应这个时,一切都很好。例如:
然后我想用下面的代码将这个URL保存在一个数组中:$result['video'][] = array('id' => $id, 'link' => $link);
这里的问题是斜线变成了 "V"。例如:echo json_encode($result);
给我:
{"video":[{"id":"1","link":"https://www.ted.com/talks/margaret_heffernan_why_it_s_time_to_forget_the_pecking_order_at_work"},{"id":"2","link":"https://www.ted.com/talks/simon_sinek_why_good_leaders_make_you_feel_safe"},{"id":"3","link":"https://www.ted.com/talks/regina_hartley_why_the_best_hire_might_not_have_the_perfect_resume"},{"id":"4","link":"https://www.ted.com/talks/sheryl_sandberg_why_we_have_too_few_women_leaders"},{"id":"5","link":"https://www.ted.com/talks/roselinde_torres_what_it_takes_to_be_a_great_leader"},{"id":"6","link":"https://www.ted.com/talks/stanley_mcchrystal#t-319307"},{"id":"7","link":"https://www.ted.com/talks/stanley_mcchrystal#t-319307"},{"id":"8","link":"https://www.ted.com/talks/stanley_mcchrystal#t-319307"},{"id":"9","link":"https://www.ted.com/talks/stanley_mcchrystal#t-319307"},{"id":"10","link":"https://www.ted.com/talks/stanley_mcchrystal#t-319307"}]}
有人知道它为什么这样做吗?
谢谢!! :)
你可以通过
解决这个问题json_encode($result, JSON_UNESCAPED_SLASHES);
这不是问题,当您对任何包含“/”的字符串进行编码时,json 会自动添加一个反斜线字符“\”,最终的字符串将变成类似“\ /”的内容。这是完全合法的JSON。当您反序列化字符串时,“\ /”将自动转换为“/”。如果输出被适当的 JSON 解析器反序列化,为什么还要担心呢?
如果您坚持在输出中使用“\ /”,您可以在打印时使用 JSON_UNESCAPED_SLASHES
标志。
类似于:json_encode($eg_url, JSON_UNESCAPED_SLASHES);
<?php
/*
* @author Saurabh Pandey
* Escaping the reverse-solidus character ("/", slash) is optional in JSON.
*
* This can be controlled with the JSON_UNESCAPED_SLASHES flag constant in PHP.
*
*/
$eg_url = 'http://www.trillbit.com/';
echo json_encode($eg_url), "<br>";
echo json_encode($eg_url, JSON_UNESCAPED_SLASHES), "<br>";
输出:
http:\/\/www.trillbit.com\/
http://www.trillbit.com/