PHP: 斜杠转换为数组时变成 "V"

PHP: a slash becomes a "V" when converted to array

我有这个变量:$link = $rows['link'];,其中包含一个 URL。 当我回应这个时,一切都很好。例如:

https://www.ted.com/talks/margaret_heffernan_why_it_s_time_to_forget_the_pecking_order_at_workhttps://www.ted.com/talks/simon_sinek_why_good_leaders_make_you_feel_safehttps://www.ted.com/talks/regina_hartley_why_the_best_hire_might_not_have_the_perfect_resumehttps://www.ted.com/talks/sheryl_sandberg_why_we_have_too_few_women_leadershttps://www.ted.com/talks/roselinde_torres_what_it_takes_to_be_a_great_leaderhttps://www.ted.com/talks/stanley_mcchrystal#t-319307https://www.ted.com/talks/stanley_mcchrystal#t-319307https://www.ted.com/talks/stanley_mcchrystal#t-319307https://www.ted.com/talks/stanley_mcchrystal#t-319307https://www.ted.com/talks/stanley_mcchrystal#t-319307

然后我想用下面的代码将这个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/