Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   объекте есть свойство, текст с вдойными ковычками, как его целиком вытащить (https://javascript.ru/forum/css-html/76475-obekte-est-svojjstvo-tekst-s-vdojjnymi-kovychkami-kak-ego-celikom-vytashhit.html)

Sergey1986 15.01.2019 01:51

при обработки ответа с сервера стоит
try {
jsn = JSON.parse(jsn)
} catch (e) {
alert(e) //ошибка в позиции кавычки
}

ошибка то не вываливаеться
а все норм
+ в консоли все бьеться...

laimas 15.01.2019 02:00

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>


А вы не выясняя причин, хотите методом научного тыка выкрутиться.

Sergey1986 15.01.2019 02:36

ОКАЙ, поэтапно
из бд
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""} а вот это обрубаеться....

Sergey1986 15.01.2019 02:44

надо добавить что в консоли браузера все выволдиться как положено
а вот если
запихивать в

html += '... '+ data.list[0].name + '....';
$('#idt').append(html);

выводит ООО при двойных ковычках
а при одинарных ввыодит весть текст

laimas 15.01.2019 02:53

Если так [{"id":"1","name":"ООО \"Сортир 123\""},{"id":"2","name":"ООО 'Хер'"}] и это ajax, то проблем быть не должно. Ну это тоже самое как alert("A \"B\""), обычное экранирование. Что-то тут не то.

Sergey1986 15.01.2019 02:59

упихваю это вот сюда
html += '<input id="" type="text" name="contractors-name" value="' + json.data.list[1].name + '" autocomplete="off" required>';

laimas 15.01.2019 03:03

Ну так чего вы хотите, вы пишите об ошибке, которой по идее быть не должно, коли в консоли есть. А оказывается вы впихиваете в двойные кавычки двойные кавычки - value="' + json.data.list[1].name + '"

Посмотрите html после этой операции, станет понятно причина - JSON.parse тут вообще не причем. Экранировать надо кавычки в name для такой вставки.

Sergey1986 15.01.2019 03:12

точно, ни какой магии :-?

Sergey1986 15.01.2019 03:12

т.е. перед вставкой

laimas 15.01.2019 03:20

Цитата:

Сообщение от Sergey1986
т.е. перед вставкой

<input value="<?=htmlspecialchars('ООО "Газпром"', ENT_QUOTES)?>" />


О чем нибудь это говорит? Не хотите проблем подобных, значит пропускайте строковые значения через htmlspecialchars, то есть до декодирования json в вашем случае.


Часовой пояс GMT +3, время: 21:38.