Tengo esta variable: $link = $rows['link']; que contiene una URL. Cuando repito esto, todo está bien. p.ej.:

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

Luego me gustaría guardar esta URL en una matriz con el siguiente código: $result['video'][] = array('id' => $id, 'link' => $link);

El problema aquí es que las barras se convierten en "V". Por ejemplo :echo json_encode($result); me da:

{"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_per{_resume"},per{_resume"}, : "4", "enlace": "https://www.ted.com/talks/sheryl_sandberg_why_we_have_too_few_women_leaders"}, {"id": "5", "enlace": "https://www.ted.com/ conversaciones / roselinde_torres_what_it_takes_to_be_a_great_leader "}, {" id ":" 6 "," link ":" https://www.ted.com/talks/stanley_mcchrystal#t-319307 "}, {" id ":" 7 "," enlace ":" https://www.ted.com/talks/stanley_mcchrystal#t-319307 "}, {" id ":" 8 "," enlace ":" https://www.ted.com/talks/ stanley_mcchrystal # t-319307 "}, {" id ":" 9 "," link ":" https://www.ted.com/talks/stanley_mcchrystal#t-319307 "}, {" id ":" 10 " , "enlace": "https://www.ted.com/talks/stanley_mcchrystal#t-319307"}]}

¿Alguien que sepa por qué hace eso?

Gracias !! :)

2
Mathias Verhoeven 4 abr. 2017 a las 12:05

2 respuestas

La mejor respuesta

Puedes resolver esto por

json_encode($result, JSON_UNESCAPED_SLASHES);
4
valbrux 4 abr. 2017 a las 09:08

Esto no es un problema, cuando codifica cualquier cadena que tenga "/" json agrega automáticamente un carácter de solidus inverso "\" y la cadena final se convierte en algo así como "\ /". Es JSON perfectamente legal. "\ /" se convertirá automáticamente en "/" cuando deserialice la cadena. ¿Por qué preocuparse si la salida no está serializada por un analizador JSON adecuado?

Si insiste en tener "\ /" en su salida, puede usar la bandera JSON_UNESCAPED_SLASHES mientras imprime. algo como: 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>";

Salida:

http:\/\/www.trillbit.com\/
http://www.trillbit.com/
1
Saurabh Pandey 4 abr. 2017 a las 09:26