Autor | Zpráva | ||
---|---|---|---|
loping Profil * |
#1 · Zasláno: 19. 11. 2008, 14:23:39
Ahoj,
mám asi malý, nicméně pro mě podstatný a hlavně neřešitelný problém. Mám v JAVASCRIPTU řetězec znaků, přičemž jeden ze znaků je „\” - a zde je můj problém – potřebuji jej nahradit takhle “\\”. Příklad: var retezec = "@c@??\VfA@d@K"; ……….. a já nějak potřebuji dostat řetězec vypadající takhle var retezec = "@c@??\\VfA@d@K"; Zkoušel jsem různé nahrazování znaků, procházení řetězců, ale nikdy tento znak žádná fce nanašla. Už jsem i slyšel názor že jsou v „loji“ … tak věřím, že nejsem |
||
Chamurappi Profil |
#2 · Zasláno: 19. 11. 2008, 14:27:31
Reaguji na lopinga:
var vysledek = retezec.replace(/\\/g, "\\\\"); var vysledek = retezec.split("\\").join("\\\\"); |
||
Měsíček Profil |
#3 · Zasláno: 19. 11. 2008, 14:41:52 · Upravil/a: Měsíček
Chamurappi .. ono je to stále při starém nebo jsem něco přehlédl?
<script type="text/javascript"> alert(retezec = "@c@??\VfA@d@K"); // @c@??VfA@d@K alert(retezec = "@c@??\VfA@d@K".split("\\").join("\\\\")); // @c@??VfA@d@K alert(retezec = "@c@??\VfA@d@K".replace(/\\/g, "\\\\")); // @c@??VfA@d@K </script> <script type="text/javascript"> alert(retezec = "@c@??\VfA@d@K".replace(/\V/g, "\\\\")); </script> <script type="text/javascript"> var retezec = "@c@??\VfA@d@K"; var vysledek = retezec.replace(/\V/g, "\\\\"); alert(vysledek); </script> |
||
bohyn Profil |
#4 · Zasláno: 19. 11. 2008, 14:43:15
loping
Kdyz to promene vlozis "@c@??\VfA@d@K" tak interpret to bere escapesekvenci \V a zpetne lomitko odstrani (vysvetluje proc ho nemuzes najit). Pokud tam chces mit 1 lomitko tak je zdvoj, jestli tam chces mit 2 lomitka napis \\\\ Z toho co sem pochopil tak potrebujes toto: var retezec = "@c@??\\\\VfA@d@K"; |
||
Chamurappi Profil |
#5 · Zasláno: 19. 11. 2008, 14:57:11
Reaguji na Měsíčka:
Vycházel jsem z toho, že má „řetězec znaků, přičemž jeden ze znaků je ‚\‘“. Neuvědomil jsem si, že myslí spíš zápis řetězce. |
||
bohyn Profil |
#6 · Zasláno: 19. 11. 2008, 15:05:48
Měsíček
On tam potrebuje dotat lomitka ne nahradit V lomitkama ;) |
||
Měsíček Profil |
#7 · Zasláno: 19. 11. 2008, 15:09:31
Reaguji na bohyna:
"On tam potrebuje dotat lomitka ne nahradit V lomitkama ;)" Možná, a? :) Já si procvičil JS, ty jsis připomenul jak je to se zpětnými lomítky a loping dostal dvojité řešení .. a všichni žili šťastně až do smrti. |
||
loping Profil * |
#8 · Zasláno: 19. 11. 2008, 16:28:59
zdravím všechny a děkuji, nicméně - pokud jsem diskuzi správně prošel, tak můj problém spočívá v následném:
- jedna fce (kóduje čísla na ASCII znaky) mi vygeneruje určitý řetězec znaků - a já dopředu nevím, kde se může objevit pro mě problematický znak \ (zpětného lomítka) - nicméně ho potřebuji brát jako obyčejný znak a proto potřebuji ve výsledném řetězci přidat (nahradit) ještě jedno - tj. \ => \\ - vše však musí probíhat "automaticky" :), proto nemůžu ručně přidávat do řetězce toto \ - nerozumím úplně dobře - myslím, že se jedná o regulerní výraz (jen jsem to někde vyčetl :) ) - ale líbí se mi, ač nefunguje :), zápis var vysledek = retezec.replace(/\\/g, "\\\\"); napadlo mě to ještě upravit na var vysledek = retezec.replace(/\\\/g, "\\\\"); ale to také nefunguje ... to Měsíček: jestli to nevyřeším, tak určitě šťastně žít nebudu :) |
||
Měsíček Profil |
#9 · Zasláno: 19. 11. 2008, 16:31:12
Tak si jednoduše ten \ najdi a nebo pomocí cyklu najít \ (x) a když to bude zrovna to \ (x) tak ho převést .. a to už jsme ti ukázali :)
|
||
loping Profil * |
#10 · Zasláno: 19. 11. 2008, 16:37:52
asi jsem natvrdlý, ale ... ač jsem zkoušel fci ...indexOf... či třeba ... split... tak nikdy to lomítko \ vůbec nenašlo - prostě neznám jediný příkaz, funkci, která by mi na to lomítko ukázala
|
||
Chamurappi Profil |
#11 · Zasláno: 19. 11. 2008, 16:39:50
Reaguji na lopinga:
„jedna fce (kóduje čísla na ASCII znaky) mi vygeneruje určitý řetězec znaků“ Jaká jedna funkce? Javascriptová funkce na straně klienta? Nebo nějaká utajená obluda na straně serveru, která ten výsledek vsazuje do výstupu? „myslím, že se jedná o regulerní výraz (jen jsem to někde vyčetl :) )“ Regulární. Mohl jsi to vyčíst třeba z toho samého příspěvku, odkud sis zkopíroval ten zápis. „... to Měsíček“ Měsíček není to, ale ten. Je mužského rodu. |
||
bohyn Profil |
#12 · Zasláno: 19. 11. 2008, 16:47:12 · Upravil/a: bohyn
loping
Pokud \ uz mas v retezci tak pred nej nepotrebujes nic vkladat. Tvuj problem mozna bude v generovani toho retezce. Edit: aspon co se tyce escape sekvence |
||
loping Profil * |
#13 · Zasláno: 19. 11. 2008, 16:49:16
Chamurappi: ano, je to fce na straně klienta - si aspoň myslím - prostě jsem stáhnul nějaké JS soubory a v nich jsou fce, já je jen volám - konkrétně se jedná o zakodovani geografických bodů - pr. mam 10 bodu a z nich mam udelanou polylinii - nemohu ukladat jednotlive geog. souradnice do databaze (mohu, ale nechci) a proto existuje kodovaci metoda, ktera mi kazdy bod zasifruje do retezce ASCII znaku - viz aplikace (ukazkova od googlu) ... http://code.google.com/apis/maps/documentation/polylineutility.html ...
- tzn. ja mam souradnice bodu a zavolam nejake fce ktere mam v tech stahnutych souborech a ty mi je zakoduji do RETEZCE - Měsíčkovi se omlouvám :) - myslel jsem to anglicky (to Měsíček) |
||
loping Profil * |
#14 · Zasláno: 19. 11. 2008, 16:55:11
konkretni priklad -
http://code.google.com/apis/maps/documentation/polylineutility.html Encoded Polylinie: czrcFtithVfZh~@t]qVjv@{h@ibAsH_\}i@ba@sbA`[toBjHh~@fI}LX_k@mSm`AiNss@f Z`l@awBpaA Encoded Levels: BBBBBBBBBBBBBBB vlozit tyto dva radky a pak uz staci jen kliknout na tlacitko "Decode Polyline and Levesl" ... vlozi se vam polylinie s lomovymi body a jejich geografickymi souradnicemi ... tento sifrovaci algoritmus ja neovlivnim - jen proste potrebuji pracovat s timto vygenerovanym retezcem (pozn. asi ve tretine retezce je prave to \ ) |
||
bohyn Profil |
#15 · Zasláno: 19. 11. 2008, 17:18:09
Retezec zadavas pres input? Pokud ano neni treba vkladat dalsi lomitko a
alert(retezec.indexOf("\\")); musi fungovat Pokud to chces posilat na server tak na to pouzij fci escape() |
||
Měsíček Profil |
#16 · Zasláno: 19. 11. 2008, 17:35:00 · Upravil/a: Měsíček
Reaguji na bohyna:
"musi fungovat " Ale, ale .. <script type="text/javascript"> var retezec = "@c@??\aA@d@K"; alert(retezec.indexOf("\\")); // -1 = nebylo nalezeno /* Vyvracíš svou dřívější teorii v prvním příspěvků (ta byla správná) */ </script> |
||
bohyn Profil |
#17 · Zasláno: 19. 11. 2008, 17:53:39
Měsíček
Ja psal pres input :) (popripade z nejakych tech funkci co to prevadeji na retezec) |
||
loping Profil * |
#18 · Zasláno: 20. 11. 2008, 10:57:16
hmm ... moc ti bohyne nerozumím, ale asi to stejně nepůjde jak radíš. Nabývám pocitu, že v JS je tento problém neřešitelný ... nicméně pro mě se problém již vyřešil, při ukládání do databáze tento řetězec proženu fcí ... addslashes ... a ta mi potřebné lomítko dodá ... já se to pořád snažil řešit v JS při načtení řetězce a s tím jsem si nevěděl rady
nicméně stejně všem moc DĚKUJI |
||
loping Profil * |
#19 · Zasláno: 20. 11. 2008, 11:00:12
pozn. jistě ne pro vás, ale kdyby měl někdo podobný problém a nebyl úplně zběhlý v programování (jako já :) )
addslashes je fcí v PHP a přidá před všechny problematické znaky lomítko př. "abc\nbco" => "abc\\nbco" |
||
bohyn Profil |
#20 · Zasláno: 20. 11. 2008, 11:26:48
OMG pred vkladanim do databaze vzdy osetri vkladane retezce fci mysql_real_escape_string a rozhodne to neres na strane klienta v podobe JS.
|
||
Časová prodleva: 15 let
|
0