объекте есть свойство, текст с вдойными ковычками, как его целиком вытащить
Доброго времени суток!
есть объект data { 0: {id: "1", name: "ООО "Газпром""} 1: {id: "2", name: "ООО 'Шел'"} } так вот если $(data[0].name) выведет только ООО а если $(data[1].name) выведет только ООО 'Шел' вопрос, как мне вытаскивать с двойными ковычками? что бы текст не обрубался? З заранее спасибо! |
думаю стоит добавить это приходит json и это данные после JSON.parse
|
я так понимаю надо на этапе encode данныех в php все ковычки заикронировать?
|
"ООО "Газпром"" - такого не может быть, поэтому и получаем только первое заключенное в кавычки. Это ошибку будет видно и при подсветке кода:
data { 0: {id: "1", name: "ООО "Газпром""} 1: {id: "2", name: "ООО 'Шел'"} } Причина - невалидный JSON. |
Цитата:
[{"id":1,"name":"\u041e\u041e\u041e \"\u0413\u0430\u0437\u043f\u0440\u043e\u043c\""},{ "id":2,"name":"\u041e\u041e\u041e '\u0428\u0435\u043b'"}] или с константой JSON_UNESCAPED_UNICODE [{"id":1,"name":"ООО \"Газпром\""},{"id":2,"name":"ООО 'Шел'"}] |
хм...вот в response все так и вяглядит
"data":{"ludaed":[{"id":"1","name":"Человек \"Махно\""},{"id":"2","name":":Животно е 'Мышка'"}]} после я его через JSON.parse ничего не понимаю.....)))) |
в коносоли то если ручками набрать этот свойство...оно выдаеться как положено с ковычками (не обрубаеться)
|
и при выполнении скрипта console.log(data.ludaed[0].name)
выводит Человек "Махно" |
Вы либо что-то не то делаете, а json нормальный, либо даже и не знаю что и сказать можно. Во-первых при том, что показывается ну не может парсер получить объект никак:
var jsn = '{"id":1,"name":"ООО "Газпром""}'; try { jsn = JSON.parse(jsn) } catch (e) { alert(e) //ошибка в позиции кавычки } А если получаете, то все не так как представляется вам. |
а вот есть это переменную в ставить в
' + strVar + ' обрубает (((( |
при обработки ответа с сервера стоит
try { jsn = JSON.parse(jsn) } catch (e) { alert(e) //ошибка в позиции кавычки } ошибка то не вываливаеться а все норм + в консоли все бьеться... |
Sergey1986,
ищите причину ошибки, вы же не руками на сервере готовите json, может в исходных данных бардак, а потому и результат таков. Вот ваши данные и проблем не будет: <? if($_POST) { $a = (object)[ ['id'=>1, 'name'=> 'ООО "Газпром"'], //пусть это имя в двойных кавычках ['id'=>2, 'name'=> "ООО 'Шел'"] //пусть это имя в одинарных кавычках ]; exit(json_encode($a, JSON_UNESCAPED_UNICODE)); } ?> <html> <head> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script type="text/javascript"> $.post(location, {p:1}, function(d) { try { d = JSON.parse(d); alert(d[0].name+'\n'+d[1].name) } catch (e) { alert(e) } }) </script> </head> </html> А вы не выясняя причин, хотите методом научного тыка выкрутиться. |
ОКАЙ, поэтапно
из бд array(2) { [0]=> array(2) { ["id"]=> string(1) "1" ["name"]=> string(25) "ООО "Сортир 123"" } [1]=> array(2) { ["id"]=> string(1) "2" ["name"]=> string(15) "ООО 'Хер'" } } $data = ['data' => $этот_массив, 'шляпа' => 'еще мусора'] далее это в $response = json_encode($data, JSON_UNESCAPED_UNICODE ); exit ($response); обработка ответа {..... "data":{"list":[{"id":"1","name":"ООО \"Сортир 123\""},{"id":"2","name":"ООО 'Хер'"}]}} далее распарсить data: list: Array(2) 0: {id: "1", name: "ООО "Сортир 123""} 1: {id: "2", name: "ООО 'Хер'"} length: 2 __proto__: Array(0) __proto__: Object вроде все честно... 1: {id: "2", name: "ООО 'Хер'"} это выводиться все ок, так как там одинарные ковычки 0: {id: "1", name: "ООО "Сортир 123""} а вот это обрубаеться.... |
надо добавить что в консоли браузера все выволдиться как положено
а вот если запихивать в html += '... '+ data.list[0].name + '....'; $('#idt').append(html); выводит ООО при двойных ковычках а при одинарных ввыодит весть текст |
Если так [{"id":"1","name":"ООО \"Сортир 123\""},{"id":"2","name":"ООО 'Хер'"}] и это ajax, то проблем быть не должно. Ну это тоже самое как alert("A \"B\""), обычное экранирование. Что-то тут не то.
|
упихваю это вот сюда
html += '<input id="" type="text" name="contractors-name" value="' + json.data.list[1].name + '" autocomplete="off" required>'; |
Ну так чего вы хотите, вы пишите об ошибке, которой по идее быть не должно, коли в консоли есть. А оказывается вы впихиваете в двойные кавычки двойные кавычки - value="' + json.data.list[1].name + '"
Посмотрите html после этой операции, станет понятно причина - JSON.parse тут вообще не причем. Экранировать надо кавычки в name для такой вставки. |
точно, ни какой магии :-?
|
т.е. перед вставкой
|
Цитата:
<input value="<?=htmlspecialchars('ООО "Газпром"', ENT_QUOTES)?>" /> О чем нибудь это говорит? Не хотите проблем подобных, значит пропускайте строковые значения через htmlspecialchars, то есть до декодирования json в вашем случае. |
это же функция php, а я же в js вкарячиваю данные
это хорошая функция если ты ренлеришь html на сервере |
ааа, т.е. пробежаться по массиву и пропустить это поле через эту функцию...понял попробую
|
Спасибо!
|
Цитата:
|
Цитата:
exit(htmlspecialchars(json_encode($array, JSON_UNESCAPED_UNICODE), ENT_QUOTES)); при выдаче клиенту. |
:) :) :) :)
|
"А вам json, что соседняя вкладка браузера на js формирует, а не сервер отдает?"
сервер )))))))) но потом то данные вставляюся в js который формирует html вообщем пробывать буду Спасибо!!! |
exit(htmlspecialchars(json_encode($array, JSON_UNESCAPED_UNICODE), ENT_QUOTES));
этот вариант не прошел(((... я думаю надо перед тем как вставить в html двойные ковычки заэкронировать или сменить... |
Не знаю как готовятся эти данные - если это набор с вложениями, то array_walk_recursive(), если это построчное получение рядов из ресурса, то array_map().
|
Если и это по каким-то причинам не получится (сомнительно), то нужно не в атрибуты вставлять, а определять свойства
$('<input/>', { type: "text", name: "contractors-name", value: json.data.list[1].name, autocomplete: "off", required: true }).appendTo(...) |
Часовой пояс GMT +3, время: 21:47. |