Solved

Problem with escape characters when splitting string into path/filename

Posted on 2008-06-18
12
414 Views
Last Modified: 2008-09-20
I am trying to write a small bit of javascript which splits the path from a variable containing path/filename.  The problem is that the HTML is embedded in an app that returns the path/filename using a special token, and when it is returned, the path/filename contains only a single \ between folders like:

c:\folder\filename.doc

instead of a escaped double \\ like:

c:\\folder\\filename.doc

I really just dabble in javascript, and need some assistance extracting just the path.  I am using the attached code. Note that '{DOC:FILENAME}' below will be changed to something like 'c:\folder\filename.doc' when viewed within the source application.
var fullPath = '{DOC:FILENAME}';

strPath = fullPath.substring(0,fullPath.lastIndexOf("\\"));

Open in new window

0
Comment
Question by:maiadog
12 Comments
 

Expert Comment

by:zmoidin
ID: 21818049
Is there a way you can encode the {DOC:FILENAME} before passing it to the javascript code?else you will have to write an encode function to change the fullPath string to proper format and then retrieve the substring you want.
0
 

Author Comment

by:maiadog
ID: 21818204
No, the {DOC:FILENAME} is just a token that gets replaced by the application when the HTML is rendered, and the format the application uses is c:\folder\filename.doc. That is why I assign it to a variable so I can work with it.

Can you elaborate on the encode function, or point me to some sample code?  Thanks.
0
 
LVL 41

Expert Comment

by:HonorGod
ID: 21818613
Easiest is to use split() to separate the pieces, and join to put then back together again.  For example, something like:


var str="c:\\folder\\filename.doc'";
var temp = str.split( '\\' );
var name = temp.pop();
var path = temp.join( '\\' );

alert( 'Path: ' + path + '\nname: ' + name );
0
 

Author Comment

by:maiadog
ID: 21818780
Yes, but in your example, you show escaped backslashes , but as I indicated initially, the problem is that the software I am using returns a value that does not include escaped backslashes.
0
 
LVL 41

Expert Comment

by:HonorGod
ID: 21818797
That is true.  However, the way to represent the single backslash character,
when one is entering a string in JavaScript, requires that the backslash be
escaped using a backslash.

If you were to use the length() function to identify the length of the following
string, what do you think the result would be?

var str="c:\\folder\\filename.doc"

Here, try it yourself.    Go to this page:

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_split

and enter this "script", and press the "... click me" button
<html>

<body>
 

<script type="text/javascript">
 

var str="c:\\folder\\filename.doc";
 

document.write( 'str: "' + str + '"<br>' );

document.write( 'len: ' + str.length );
 

</script>
 

</body>

</html>

Open in new window

0
Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

 

Author Comment

by:maiadog
ID: 21818855
I do understand that, but I am not in control of how that value is returned to me from the source application, therefore perhaps I need a way to modify the string.

The only way I have of getting at that value is to use the token {DOC:FILENAME} which is returns a value that contains a non-escaped path when the page is rendered.
0
 
LVL 41

Expert Comment

by:HonorGod
ID: 21820728
This string does contain only 1 backslash  Not 2.

var str = 'c:\\filename.txt';

Try this:

  alert( 'str: "' + str + '"' )

and you will see a message like:

str: "c:\filename.txt"

So it does not contain an escaped path.  The escaped backslash
is only in the source code processed by the JavaScript interpreter.
0
 

Author Comment

by:maiadog
ID: 21821853
I understand that your example is escaped and it is actually only one backslash.  But the application I am using *does not* render the page with an escaped backslash in the path.  I am trying to figure out how I can make it escaped as in your example.
0
 
LVL 41

Accepted Solution

by:
HonorGod earned 63 total points
ID: 21824006
Well, it doesn't matter how the string value is obtained.
You can use the instructions shown above (and repeated here)
// Somehow, the variable "str" gets a fully qualified filename value,

// something like 'C:\folder\filename.doc'

// Note: this is simply a representation of the characters in the

//       string, not the syntax required to assign the value in

//       JavaScript

//-------------------------------------------------------------------

var temp = str.split( '\\' );    // Break the string into an array

var name = temp.pop();           // Remove the last item (filename.doc)

var path = temp.join( '\\' );    // Build the path using remnants
 

alert( 'Path: "' + path + '"\nname: "' + name + '"' );

Open in new window

0
 
LVL 54

Assisted Solution

by:b0lsc0tt
b0lsc0tt earned 62 total points
ID: 21826166
I am not sure I understand what you need and how this works but if you want 2 backslashes as the result then use ...

var.replace(/\\/, "\\\\")

Of course you may need to use it in a different way and I can help with that but basically it will look for one backslash (escaped in the first argument above) and replace it wil 2 (both escaped in the second argument, the string, above).

Let me know if you have a question or need help using this.

bol
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

The task A number given should be formatted for easy reading by separating digits into triads. Format must be made inline via JavaScript, i.e., frameworks / functions are not welcome. So let’s take a number like this “12345678.91¿ and format i…
This article discusses how to create an extensible mechanism for linked drop downs.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now