|
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335
|
|||||||||||
Eval против JSON.parse11.11.2025, 17:46. Показов 1346. Ответов 32
Метки нет (Все метки)
Сразу скажу, использовал оба метода, переключился на JSON.parse пожалуй больше из соображений более быстрого написания кода на php (хотя и повлияла встреченная где-то фраза, что eval работает медленно).
Но сейчас решил разобраться из чисто теоретического интереса: почему плохо и плохо ли использование eval в таком применении: В php формируется строка типа:
js
0
|
|||||||||||
| 11.11.2025, 17:46 | |
|
Ответы с готовыми решениями:
32
Отловить ошибку в JSON.parse (переварить не JSON) SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
|
|
Супер-модератор
3940 / 2042 / 829
Регистрация: 13.03.2010
Сообщений: 6,715
|
||
| 12.11.2025, 10:28 | ||
Сообщение было отмечено 755 как решение
Решениеeval исполняет код, а не парсит данные. Любая подмена ответа (взлом сервера или БД, XSS, HTTP, прокси/расширения/антивирус, CDN, да что угодно) = произвольный JS в браузере.2. С eval вы сами обязаны правильно экранировать строки, в то время как json_encode делает это корректно "из коробки".3. Аргумент "одна операция вместо двух" неверный: и eval, и JSON.parse парсят строку, только eval ещё и исполняет.4. eval априори медленнее любой "альтернативы".5. Правильным решением будет в PHP сделать echo json_encode($arr, JSON_UNESCAPED_UNICODE);, а в JS const m_el = JSON.parse(xhr.responseText); (ну или fetch(...).then(r=>r.json())).
1
|
||
|
2598 / 1502 / 689
Регистрация: 23.08.2015
Сообщений: 3,798
|
|
| 12.11.2025, 11:15 | |
|
0
|
|
|
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335
|
||||||||||||||||||||||
| 12.11.2025, 11:41 [ТС] | ||||||||||||||||||||||
|
Во-первых, тема создавалась как дискуссионная. В Вашем же ответе не увидел аргументов за или против: • для этого есть JSON (можно и другие форматы) - да, есть. Но и eval c этим справляется. А чем лучше JSON - из ответа не ясно. • п.2. меня также не убедил - по нему выразил ранее свои сомнения. И вот только от gogolik наконец-то прозвучали аргументы против eval. Причем аргументированные. Особенно п.1. Как раз то, что меня изначально и беспокоило. • по п.2 - это делается элементарно. И ошибки легко выявляются при отладке. • по п.3-4. - не совсем так. в php преобразование в строку, которой нет при eval (это и имел виду под первой операцией)
Да, eval выполняет интерпретатор js, поэтому операция будет медленне, чем JSON.parse. Но при нескольких массивов их еще надо разъединить (возможно, я использовал не лучший способ):
И самое на мой взгляд важное: eval работает на стороне клиента, а json_encode на стороне сервера - хотя и в одном и в другом случае не думаю, что время имеет существенное значение. Добавлено через 14 минут Просто отвечаю на вопрос sad67man, чтобы кто-либо не подумал, что спорю или что-то доказываю:
Надеюсь, смог ответить на Ваш вопрос ? Добавлено через 8 минут Да, gogolik, забыл поблагодарить за развернутый ответ и потраченное на него время.
0
|
||||||||||||||||||||||
|
2598 / 1502 / 689
Регистрация: 23.08.2015
Сообщений: 3,798
|
||
| 12.11.2025, 11:43 | ||
|
json_encode как раз защитит от инъекций и при его помощи легче формировать вложенные объекты.
0
|
||
|
Супер-модератор
3940 / 2042 / 829
Регистрация: 13.03.2010
Сообщений: 6,715
|
|
| 12.11.2025, 11:52 | |
|
755, учитесь сразу делать правильно, а не как попало. Вот основной посыл отвечающих.
0
|
|
|
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335
|
|||
| 12.11.2025, 12:08 [ТС] | |||
|
Чисто теоретически: если например таким образом формировать список брендов (когда-то давно, когда только был знаком с php и формировал справочник брендов, в их названиях обнаружил спецсимволы, которые провоцировали ошибки. Но эту проблему тогда легко решил, если не подводит память другой кодировкой строк. Добавлено через 15 минут Не по теме. И увидел Ваш комментарий к данной теме: "Тотальное нежелание учиться, нежелание слушать ..." и решил его прокомментировать. С чего Вы взяли, что у меня отсутствует нежелание учиться - за эти полтора года понимаю, что очень многое узнал, хотя и можно было бы узнать намного больше. И не только узнал, но и стал чувствовать язык при программировании, хотя еще и очень далек до полного, а это уже дается только при практике. А кроме того, возможно, мне уже поздно учиться, вопреки дедушке Ленину и мое предназначение не в программировании и коммерческом проекте, которым сейчас занят, а в некоммерческом (вспоминается фраза "жизнь пронеслась без явного следа, ..."), который мне поэтому кажется интереснее, но которым пока не могу заняться по некоторым причинам.
0
|
|||
|
3797 / 1625 / 428
Регистрация: 14.03.2022
Сообщений: 4,043
|
||||
| 12.11.2025, 12:27 | ||||
|
755, ты шедевральный индивид.
Благо такие встречаются не часто... Я не хотел вступать в полемику, но тут трудно удержаться. ![]() Камрад voraa привел ранее отличную ассоциацию с ПДД. ![]() Вот примерный макет диалога который тут происходит... Новичок (Н) и профи (П). Н - Как лучше делать "так" или "сяк"? П - Не делай "так"! Нужно делать "сяк". Н - Ты меня не убедил... Далее, что бы тебе не писали, следуют утверждения или частные случаи, что с eval тебе все равно нормально будет работать... ![]() Отсюда, присоединяюсь к вопросу ![]() Там все и написано. Добавлено через 12 минут Оно конечно для 755 не аргумент... ![]() Но на мой взгляд вот эта фраза из учебника уже дает правильный посыл
Вот еще статейка https://habr.com/ru/articles/221937 Но только 755 опят напишет, что это все "не его случай"... И ничего убедительно в том для него нет.
1
|
||||
|
93 / 88 / 17
Регистрация: 05.08.2021
Сообщений: 387
|
|
| 12.11.2025, 14:12 | |
|
Про eval все дружно говорят что в серьезных проектах его лучше не использовать. Через него в код можно ввести что-то вредоносное
1
|
|
|
3797 / 1625 / 428
Регистрация: 14.03.2022
Сообщений: 4,043
|
|
| 12.11.2025, 14:58 | |
|
Zloyalex100, дело даже не в этом... Ответ в моей цитате из учебника.
![]() Т.е. просто считайте что никакого eval - нет.И жизнь ваша от этого никак не изменится.
0
|
|
|
2598 / 1502 / 689
Регистрация: 23.08.2015
Сообщений: 3,798
|
|||||||
| 12.11.2025, 15:06 | |||||||
Вообще я заметил, что именно фулстек-разработчики любят вот так размазывать логику.. часть фронта перекладывать на бэк и наоборот и считают это их преимуществом. Самый ужасный код, с которым мне приходилось сталкиваться как раз был от таких людей.. Что у них творится в голове - одному богу известно.. ну какие-то гениальнейшие загогулины, которые на практике просто невозможно поддерживать.
0
|
|||||||
|
3797 / 1625 / 428
Регистрация: 14.03.2022
Сообщений: 4,043
|
|
| 12.11.2025, 15:41 | |
|
0
|
|
|
409 / 301 / 112
Регистрация: 28.08.2013
Сообщений: 787
|
|
| 13.11.2025, 17:46 | |
|
Использовать eval() крайне не рекомендуется. Потому что eval() парсит строку в код, и его можно выполнить. Что не безопасно.
В JSON-объекте только данные, нет функций, что безопаснее. Более того, если в xmlHttp указать ожидаемый ответ JSON, то браузер вернём объект в xmlHttp.response.
1
|
|
| 14.11.2025, 16:14 | |||||||
|
Добавлено через 2 минуты Ну конечно же, конкретно так мало кто делает, по моим наблюдениям. Скорее так
0
|
|||||||
| 14.11.2025, 16:14 | |
|
Помогаю со студенческими работами здесь
33
Код 200 SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Ошибка "json.parse unexpected character" Не работает JSON.parse, ошибка Unexpected token o Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|