Π‘Ρ‚ΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ с ошибками синтаксиса ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со строковыми Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°ΠΌΠΈ β€” это классичСский «обряд посвящСния» для любого Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8. Когда Π²Π½ΡƒΡ‚Ρ€ΠΈ тСкста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² запрос ΠΈΠ»ΠΈ записан Π² Ρ„Π°ΠΉΠ» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° XML ΠΈΠ»ΠΈ JSON, находятся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы, систСма пСрСстаСт ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ строки. Π‘Π°ΠΌΡ‹ΠΌ частым Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΠΎΠΌ Ρ‚Π°ΠΊΠΈΡ… ситуаций становятся Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Если ΠΈΡ… Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, компилятор выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ «НСвСрноС использованиС символа» ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ…ΡƒΠΆΠ΅, сформируСт Π½Π΅Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΉ запрос ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π² 1Π‘ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами, начиная ΠΎΡ‚ простого удвоСния символов ΠΈ заканчивая использованиСм встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ строк. ПониманиС этих ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² критичСски Π²Π°ΠΆΠ½ΠΎ для написания Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Β«ΡƒΠΏΠ°Π΄Π΅Ρ‚Β» ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ нСстандартных Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠΎΠ»Π΅ коммСнтария ΠΈΠ»ΠΈ названия Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Ρ‹.

БинтаксичСскиС особСнности строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² Π² 1Π‘

Π’ языкС 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π» Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сам символ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΡŒ строки, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ посчитаСт это ΠΊΠΎΠ½Ρ†ΠΎΠΌ строки. ОсновноС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ гласит: для отобраТСния ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ строки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ подряд.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ называСтся экранированиСм. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π΅Ρ‰Π΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ исполнСн. Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ присваивания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ тСкста, содСрТащСго ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ:

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС пСрСмСнная ВСкстБообщСния Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Β«Π‘Ρ‡Π΅Ρ‚ Π½Π° ΠΎΠΏΠ»Π°Ρ‚Ρƒ "β„– 45" выставлСн». ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² исходном ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ использовали Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ подряд Π² сСрСдинС строки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ тСкстС. Π­Ρ‚ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ, Π½ΠΎ самый Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°ΠΌΠΈ Π² Ρ‚Π΅Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Однако ситуация услоТняСтся, ΠΊΠΎΠ³Π΄Π° строка формируСтся динамичСски. Если тСкст поступаСт ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ ΠΈΠ· внСшнСго источника, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅. Π—Π΄Π΅ΡΡŒ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ приходят ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Никогда Π½Π΅ ΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π² Ρ†ΠΈΠΊΠ»Π΅, пСрСбирая символы строки, Ссли для этого Π΅ΡΡ‚ΡŒ встроСнныС срСдства. Ручная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ риск ошибок ΠΈ сниТаСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π¦ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для запросов

НаиболСС частая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ динамичСских запросов. Когда Π²Ρ‹ подставляСтС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² тСкст запроса, содСрТимоС этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ структуру SQL-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ сущСствуСт встроСнная функция Π¦ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π­Ρ‚Π° функция автоматичСски ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы, удваивая ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈ оборачивая ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΡƒΡŽ строку Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Ρ‘ бСзопасной для вставки Π² тСкст запроса. Бинтаксис Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ прост: ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ строку ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ ΠΊ вставку подстроку.

ВСкстЗапроса = "ВЫБРАВЬ НомСнклатура.НаимСнованиС Π˜Π— Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура КАК НомСнклатура Π“Π”Π• НомСнклатура.НаимСнованиС = " + Π¦ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉΠ’Π²ΠΎΠ΄);

Если пСрСмСнная ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉΠ’Π²ΠΎΠ΄ содСрТит тСкст Π’ΠΎΠ²Π°Ρ€ "Π­Π»ΠΈΡ‚Π½Ρ‹ΠΉ", функция Π¦ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² "Π’ΠΎΠ²Π°Ρ€ ""Π­Π»ΠΈΡ‚Π½Ρ‹ΠΉ""". Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ запрос Π±ΡƒΠ΄Π΅Ρ‚ синтаксичСски Π²Π΅Ρ€Π½Ρ‹ΠΌ, ΠΈ сСрвСр 1Π‘ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ.

ИспользованиС Π΅Ρ‘ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ Π½Π° экран ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ лишниС ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‡Ρ‚ΠΎ являСтся ошибкой интСрфСйса.

πŸ’‘

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса вмСсто ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ строк, ΠΊΠΎΠ³Π΄Π° это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ экранирования автоматичСски, Π½ΠΎ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ SQL-ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΉ ΠΈ ускоряСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π° счСт ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ»Π°Π½ΠΎΠ² запроса.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов Ρ‡Π΅Ρ€Π΅Π· Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ

Π’ случаях, ΠΊΠΎΠ³Π΄Π° функция Π¦ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ JSON-структуры Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… для Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² тСкстовый Ρ„Π°ΠΉΠ» Π±Π΅Π· использования конструкторов), Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ символ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ.

Для экранирования Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π² контСкстС JSON ΠΈΠ»ΠΈ CSV часто трСбуСтся Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ Π½Π° Π΄Π²Π΅ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ символ (ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш). Алгоритм дСйствий выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ всС вхоТдСния символа ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈ замСняСм ΠΈΡ… Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ экранирования.

  • πŸ”Ή Для JSON-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°: замСняСм " Π½Π° \" (добавляСм ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш).
  • πŸ”Ή Для SQL-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… языков Π²Π½ΡƒΡ‚Ρ€ΠΈ 1Π‘: замСняСм " Π½Π° "" (ΡƒΠ΄Π²Π°ΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ).
  • πŸ”Ή Для HTML-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ: замСняСм " Π½Π° ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ".

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ строки ΠΊ вставкС Π² JSON-Ρ„Π°ΠΉΠ»:

Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ° = "Π’ΠΎΠ²Π°Ρ€ ""Π‘ΡƒΠΏΠ΅Ρ€""";

ЭкранированнаяБтрока = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°, """", "\""");

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ процСссом, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ программиста Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Ошибка Π² порядкС Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ символа-замСнитСля ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ€Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Ссли Π²Ρ‹ сначала Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ слСши, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСпрСдсказуСмым.

πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ экранирования Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅ всСго?
Ѐункция Π¦ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса
Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

Π Π°Π±ΠΎΡ‚Π° с ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ

Π’ языкС 1Π‘ сущСствуСт нюанс, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ часто Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Π­Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ интСрСсный ΠΏΡ€ΠΈΠ΅ΠΌ для упрощСния ΠΊΠΎΠ΄Π°. Если ваш тСкст содСрТит ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ саму строку ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° экранированиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π½Π΅ потрСбуСтся.

Рассмотрим Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ объявлСния строк с ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ:

Π’ΠΈΠΏ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ строки Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ строки Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² памяти ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ экранирования
Π”Π²ΠΎΠΉΠ½Ρ‹Π΅ (") ΠŸΡ€ΠΈΠ²Π΅Ρ‚ "ΠœΠΈΡ€" Ошибка синтаксиса Π”Π° (ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ""ΠœΠΈΡ€"")
ΠžΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ (') ΠŸΡ€ΠΈΠ²Π΅Ρ‚ "ΠœΠΈΡ€" ΠŸΡ€ΠΈΠ²Π΅Ρ‚ "ΠœΠΈΡ€" НСт
Π”Π²ΠΎΠΉΠ½Ρ‹Π΅ (") ΠŸΡ€ΠΈΠ²Π΅Ρ‚ 'ΠœΠΈΡ€' ΠŸΡ€ΠΈΠ²Π΅Ρ‚ 'ΠœΠΈΡ€' НСт
ΠžΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ (') ΠŸΡ€ΠΈΠ²Π΅Ρ‚ 'ΠœΠΈΡ€' Ошибка синтаксиса Π”Π° (ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ''ΠœΠΈΡ€'')

ИспользованиС Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ для ограничСния строки β€” это отличная ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ читаСмости ΠΊΠΎΠ΄Π°. Однако стоит Π±Ρ‹Ρ‚ΡŒ остороТным: Ссли Π² строкС ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±Π° Ρ‚ΠΈΠΏΠ° ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, Π²Π°ΠΌ всС Ρ€Π°Π²Π½ΠΎ придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ экранированиС для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ….

Π’Π°ΠΊΠΆΠ΅ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с символом ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ (backtick), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² спСцифичСских конфигурациях ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с внСшними систСмами. Π’ стандартном синтаксисС 1Π‘ ΠΎΠ½ Π½Π΅ являСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΌ строки, поэтому Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ экранирования Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ².

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈΠ· статСй ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΡƒΠΌΠΎΠ² слСдитС Π·Π° Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ. Иногда тСкстовыС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ автоматичСски Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ прямыС ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π½Π° Β«Π΅Π»ΠΎΡ‡ΠΊΠΈΒ» ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСпонятным ошибкам компиляции Π² 1Π‘.

Π­ΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π² JSON ΠΈ XML

БоврСмСнная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² 1Π‘ Π½Π΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½ΠΎ связана с ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ JSON ΠΈ XML ΠΈΠΌΠ΅ΡŽΡ‚ свои строгиС ΠΏΡ€Π°Π²ΠΈΠ»Π° экранирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ» самого языка 1Π‘. ΠŸΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΉ сСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Ρ‡Ρ‚ΠΎ Π½Π΅ рСкомСндуСтся, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки.

Π’ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ слуТСбными символами для обозначСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ строковых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π›ΡŽΠ±Π°Ρ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° Π²Π½ΡƒΡ‚Ρ€ΠΈ значСния Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€Π΅Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ слэшСм. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ сам ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш, Ссли ΠΎΠ½ встрСчаСтся Π² тСкстС. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ этого ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ парсСр Π½Π° сторонС ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ систСмы ΠΎΡ‚Π²Π΅Ρ€Π³Π½Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ стоит ΠΏΠΈΡΠ°Ρ‚ΡŒ свой парсСр JSON?

НаписаниС собствСнного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ JSON сопряТСно с высокими рисками. Π’ стандартС ΠΌΠ½ΠΎΠ³ΠΎ нюансов: экранированиС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… символов (пСрСнос строки, табуляция), Ρ€Π°Π±ΠΎΡ‚Π° с Unicode. Ошибка Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π°ΠΉΡ‚Π΅ сдСлаСт вСсь Ρ„Π°ΠΉΠ» Π½Π΅Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ.

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ прСдоставляСт ΠΌΠΎΡ‰Π½Ρ‹Π΅ срСдства для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этими Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π§Ρ‚Π΅Π½ΠΈΠ΅JSON, Π—Π°ΠΏΠΈΡΡŒJSON, Π§Ρ‚Π΅Π½ΠΈΠ΅XML, Π—Π°ΠΏΠΈΡΡŒXML. Π­Ρ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π΅Ρ€ΡƒΡ‚ Π½Π° сСбя всю Π³Ρ€ΡΠ·Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Π’Π°ΠΌ достаточно ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ записи сам ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π² Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов.

Если ΠΆΠ΅ Π²Ρ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для простого Π»ΠΎΠ³Π° Π² спСцифичСском Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Π·Π°ΠΌΠ΅Π½. Π‘Π½Π°Ρ‡Π°Π»Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ слСши, Π·Π°Ρ‚Π΅ΠΌ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы. ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠΌΡƒ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΡƒΠΆΠ΅ экранированных символов.

πŸ’‘

ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ встроСнныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ записи JSON/XML вмСсто Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ строк. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ стандартноС экранированиС ΠΈ избавляСт ΠΎΡ‚ ошибок ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ способы ΠΈΡ… ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами. Бамая распространСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” «лСсСнка» ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ становится Π½Π΅Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈΠ·-Π·Π° большого количСства подряд ΠΈΠ΄ΡƒΡ‰ΠΈΡ… символов """""". Π’ Ρ‚Π°ΠΊΠΈΡ… ситуациях слоТно Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, сколько ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² строку.

Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… участков ΠΊΠΎΠ΄Π° рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ 1Π‘ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ значСния Π² ΠΎΠΊΠ½ΠΎ сообщСний ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ». НС ΠΏΠΎΠ»Π°Π³Π°ΠΉΡ‚Π΅ΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π°. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ для часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ слоТных строковых ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠ΅ конструкции ΠΏΠΎ всСму ΠΊΠΎΠ΄Ρƒ.

  • πŸ”Έ Ошибка: Π·Π°Π±Ρ‹Π»ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ строку послС экранированной ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.
  • πŸ”Έ Ошибка: использовали ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ для ограничСния, Π½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·Π°Π±Ρ‹Π»ΠΈ ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΡƒΡŽ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ.
  • πŸ”Έ Ошибка: ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ Π¦ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΡ‚ΠΎΠΌ Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠΎΠΏΠ°Π»ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ цитирования (Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ экранированиС).

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ аспСкт β€” ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°. ΠŸΡ€ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ситуация, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ экранированы Π²Π΅Ρ€Π½ΠΎ, Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ «кракозябры». Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π° Π½Π΅ экранирования, Π½ΠΎ симптомы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ.

β˜‘οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° строки ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

FAQ: Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

Как ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ Π² запросС Π±Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π¦ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ?

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, """", """"""). Однако использованиС Π¦ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ спСцсимволы ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ запроса.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² сообщСниС ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ?

Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ экранирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π¦ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ) ΠΊ строкС, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Π° Π½Π΅ для вставки Π² запрос. Для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран экранированиС Π½Π΅ трСбуСтся, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ символы экранирования.

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш для экранирования Π² 1Π‘?

Π’Π½ΡƒΡ‚Ρ€ΠΈ строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² языка 1Π‘ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш Π½Π΅ являСтся символом экранирования для ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ. Для экранирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ΄Π²ΠΎΠ΅Π½ΠΈΠ΅ символа. ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш экранируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ JSON ΠΈΠ»ΠΈ рСгулярными выраТСниями Ρ‡Π΅Ρ€Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° Π΅ΡΡ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ?

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π€Π°ΠΉΠ» ΠΈΠ»ΠΈ Π—Π°ΠΏΠΈΡΡŒΠ’Π΅ΠΊΡΡ‚Π° ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ экранирования, Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ имя Ρ„Π°ΠΉΠ»Π° ΠΊΠ°ΠΊ строковый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для запуска Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок ΠΏΡ€ΠΈ вставкС тСкста ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° ΠΎΠ±ΠΌΠ΅Π½Π°?

ВСкст ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° ΠΎΠ±ΠΌΠ΅Π½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Β«ΡƒΠΌΠ½Ρ‹Π΅Β» ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ (Π΅Π»ΠΎΡ‡ΠΊΠΈ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ стандартных ASCII ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ. ΠŸΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Ρ‚Π°ΠΊΠΎΠ³ΠΎ тСкста рСкомСндуСтся ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ для Π·Π°ΠΌΠ΅Π½Ρ‹ типографских ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅.