Autor | Zpráva | ||
---|---|---|---|
midlan Profil |
#1 · Zasláno: 13. 2. 2013, 21:05:29
Zdravím,
chci se zeptat proč escapovací funkce v pro MySQL v PHP přidávají zpětné lomítko i před uvozovky ( " ) ?
|
||
Alphard Profil |
#2 · Zasláno: 13. 2. 2013, 21:09:35
Proč by neměly? Jsou to znaky se zvláštním významem, stejně jako jiné.
|
||
juriad Profil |
#3 · Zasláno: 13. 2. 2013, 21:10:17
http://dev.mysql.com/doc/refman/5.1/en/string-literals.html
A string is a sequence of bytes or characters, enclosed within either single quote (“'”) or double quote (“"”) characters. |
||
midlan Profil |
Alphard, juriad:
Tím se vysvětluje proč je uvozovka taky escapovaná, ale nechápu jaktože se mi do databáze neuloží i to lomítko? To s tím tvůrci počítali předem? EDIT: aha už to chápu, když zpětné lomítko nescapuji tak bude ignorováno, když za ním není speciální znak. |
||
juriad Profil |
Protože je to tak navržené, pročti si odkázanou stránku; obzvlášť okolí tabulky 9.1
Abys uložil zpětné lomítko, musíš ho napsat dvakrát za sebou. To také escapovací funkce dělají. |
||
midlan Profil |
#6 · Zasláno: 13. 2. 2013, 22:59:32
juriad:
„Abys uložil zpětné lomítko, musíš ho napsat dvakrát za sebou.“ Tohle mi je známo i z PHP (a ostatních jazyků), ale PHP když nenajde za neescapovaným lomítkem speciální znak, tak s lomítkem zachází jako kdyby escapované bylo, právě jsem si myslel že v MySQL to bude taky tak. |
||
Tori Profil |
midlan:
„právě jsem si myslel že v MySQL to bude taky tak.“ edit: opravena blbost. |
||
midlan Profil |
Tori:
„Je to přesně tak.“ Právě, že není. Narážel jsem hlavně na to, že v PHP (a snad ve všech ostatních jazycích) kód <?php echo 'dnes je \hezky'; <?php echo 'dnes je \\hezky'; V tomhle se mysql chová jinak, SELECT 'dnes je \hezky' vypíše dnes je hezky, kdežto SELECT 'dnes je \\hezky' vypíše dnes je \hezky
|
||
Tori Profil |
#9 · Zasláno: 13. 2. 2013, 23:53:11
midlan:
Omlouvám se za dezinformace, máte pravdu samozřejmě. |
||
Majkl578 Profil |
midlan:
„protože h není speciálním znakem.“ I kdyby byl, nemělo by to efekt, protože řetězec je v apostrofech. Vždy by se tedy vypsalo \hezky (resp. tedy např. \novinka ).
„tedy to samé jako kdybych použil escapované lomítko (správné řešení)“ Správné by bylo v případě použití uvozovek. U apostrofů nikoliv, jelikož u nich se escape sekvence neprovádí. |
||
Jan Tvrdík Profil |
#11 · Zasláno: 14. 2. 2013, 12:10:29
midlan:
„a snad ve všech ostatních jazycích“ Jen doplním, že ve striktnějších jazycích (jako třeba C#) to s tím jedním lomítkem rozhodně neprojde právě proto, že \h je nevalidní escape sekvence.
Moje osobní doporučení je escapovat zpětné lomítko vždy ve dvojitých uvozovkách. V apostrofech jen, je-li to potřeba. Majkl578: „U apostrofů nikoliv, jelikož u nich se escape sekvence neprovádí.“ Je to správné řešení je to i u apostrofů. Rozdíl je v tom, že u apostrofů není to předchozí řešení špatné. |
||
midlan Profil |
Jan Tvrdík:
„Moje osobní doporučení je escapovat zpětné lomítko vždy ve dvojitých uvozovkách. V apostrofech jen, je-li to potřeba.“ Už jsem si navyknul escapovat přesně tak jak se má, protože dost často používám regulární výrazy. Děkuji všem za objasnění. |
||
Časová prodleva: 11 let
|
0