Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Замена косай черты


Автор: omka 6.11.2008, 16:55
Подскажите:
Есть строка такого вида "C:\temp\dir\". Как сделать что бы косая черта распознавались как косая чёрта а не как спецсимвол? Нужно чем-то заменить черту? Как это сделать?
PS: Эта строка, после некоторых манипуляций, вставляется в текстфилд и должна иметь вид: "C:\temp\dir\"

Автор: Zeroglif 6.11.2008, 17:23
Код

alert('C:\\temp\\dir\\');

Автор: omka 6.11.2008, 18:03
Наверное не точно объяснил в чём проблема.
1 Строка может быть любой.
2 после получения этой строки она складыватся с другой строкой. (в момент сложения строка уже без слешей).
3 результирующая строка вставляется в текстфилд

Пример:
1-я строка "C:\temp\dir\"
2-я строка "folder"

Когда складываю строки имею C:tempdir\ + folder. (слеши потерялись)

Надо их как то replace() только не знаю как)

Автор: destrd 6.11.2008, 18:37
Ну как-то так можно сделать
Код

str = str.replace(/\\/g, "\\\\");

Автор: bars80080 6.11.2008, 18:45
наверное данные проходят определённуб обработку, прежде чем попадают под твои действия, и наверное эта обработка - засунуть в БД и ты уже достаёшь их оттуда. так?

Автор: ksnk 6.11.2008, 19:57
bars80080
Цитата

наверное данные проходят определённуб обработку

Угу... Вероятно, они складываются вот так вот "$variable1$variable2" smile

Автор: omka 10.11.2008, 12:37
Ну как-то так можно сделать
Код

str = str.replace(/\\/g, "\\\\");


Не помогает((( FireBug показывает:
Код

illegal character
[Break on this error] var currentFolder = "C:\dsts\dfdf\g\".replace(/\\/g, "\\\\");;\n


Походу что-то другое надо...
Суть программы вот в чём: сканирую файловую систему сервера, при выборе нужной папки - путь к ней вставляется в поле на другой странице... Вот этот путь формируется их того что приходит с сервера ("C:\dsts\dfdf\g\") + имя текущей папки ("folder").
Если просто склеивать строки - не получается, тк путь приобретает такой вид: "C:dstsdfdfgfolder....

PS: на сервере изменение пути не подходит - надо именно на клиенте.

Автор: bars80080 10.11.2008, 17:48
может на сервере провести необходимую обработку и поставлять клиенту нормальный путь?

Автор: omka 10.11.2008, 17:57
Цитата(bars80080 @ 10.11.2008,  17:48)
может на сервере провести необходимую обработку и поставлять клиенту нормальный путь?

А на клиенте это сделать возможно?

Автор: bars80080 10.11.2008, 21:29
фишка в том, что C:dstsdfdfgfolder - это не нормальный путь, его посечили видимо при выемке из базы. тогда надо разбираться с ней.
если вырубка происходит при передаче клиенту, то надо просто превратить \ в спецсимвол, либо экранировать. самое простое провести url-кодирование

но в любом случае, надо прежде всего разобраться, на каком конкретно этапе происходит инквизиция. может они уже у тебя в базе хранятся в обрезанном состоянии. тогда задача вообще взята не с того конца

Автор: destrd 10.11.2008, 21:36
Цитата(omka @  10.11.2008,  12:37 Найти цитируемый пост)
Не помогает((( FireBug показывает:

Ну понятное дело. При объявлении слеши уже надо экранировать. т.е.
Код

var currentFolder = "C:\\dsts\\dfdf\\g\\".replace(/\\/g, "\\\\");

Тогда на выходе и получится по два слеша. Определись, когда у тебя слеши пропадают.

Автор: omka 12.11.2008, 10:43
Путь выводится на клиентской странице. Выводится правильно. Т.е. с сервера приходит "C:\folder\dir".
Но при обработке этой строки в скрипте получается что именно там слеш распознаётся как спецсимвол и неучитывается.

Автор: ksnk 12.11.2008, 11:29
omka
  • Как (кусок кода) выводится эта пременная в окно броузера?
  • Как (кусок кода) используется эта переменная, чтобы такой странный эффект получился?
Вероятно, слеши менять стоит не в JavaScript'е а в Php smile

Автор: omka 12.11.2008, 15:01
Ну вот к примеру код 
Код

alert("C:\dir\t".replace(/\\/, "\\\\"));


При выводе даёт такой результат: "C:dir".

Вывод: распознал \t как спецсимвол и не вывел в alert. Т.е. замену на клиенте произвести проблемматично....?

Автор: bars80080 12.11.2008, 15:08
Цитата(omka @  12.11.2008,  14:01 Найти цитируемый пост)
При выводе даёт такой результат: "C:dir".

Вывод: распознал \t как спецсимвол 

а куда этот слэш c:\ делся?

Автор: omka 12.11.2008, 15:18
Исчез. Очевидно потому что \d никакой символики не несёт, в отличии от \t. Поэтому он просто подставил символ d...

Автор: ksnk 12.11.2008, 16:57
omka, я вас как художник художника спрашиваю, с синтаксисом JavaScript знакомы? smile

Чтобы пример с Алерт выдавал то, что от него, по всей видимости, требуется нужно написать 
Код

alert("C:\\dir\\t");

Чтобы из PHP породить разумно выполняющуюся конструкцию нужно сделать примерно так
Код

$text="c:\\dir\\t";
printf( 'alert("%s");',addslashes($text));



Автор: omka 12.11.2008, 17:16
ksnk
Как художник художнику отвечаю - знаком. Сайт написан на java. Прекрасно понимаю что таким выводом я получу то что вижу. Я просто веду к тому что:
как мне заменить обратный слешь на клиенте. Мне интересно в строке, которая приходит с сервера на клиент в таком виде "C:\dsd\t\tr, можно ли как нибудь выщемить эти слеши. smile  
С JS работал не особо много поэтому многого не знаю. В принципе поэтому и написал.... Может я чего то недопонял....

Если нельзя - буду сереверную сторону ковырять, но это потянет за собой много всего нехорошего) уже пробовал)

Автор: ksnk 12.11.2008, 18:03
Цитата

буду сереверную сторону ковырять

Вот это правильно. 

Можно, конечно, javascript'ом заменять символы \a\b... \z на \\a \\b ... \\z, но это путь, imho, ущербен. Можно нарваться на какие-нибудь особенные спецсимволы, с которыми регулярки и заменялки откажутся работать... Причем для разных броузеров эта фича может работть по своему... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)