Wasn't sure this posted the first time, apologies if this winds up a
double-post...
To the best of my knowledge, struts does NOT handle this. I have faced this
issue, as I'm sure many have. Here's the code I use to solve it... This is
simply a static method of a Helpers class I reuse throughout most of my
projects... I don't for a second claim it is the best answer, but it does work
for me...
/**
* This method makes a string "safe" for use in JScript. That means that
* aspostrophes, quotes and hard linebreaks are replaced with the
* corresponding escape sequences. This is important because many strings
* passed back to the GUI are inserted into JScript string. If the text
* that is inserted contains quotes, apostrophes or line breaks, it will
* almost certainly break the JScript code. This method should be called on
* any string going back to the GUI. This method also trims the string.
*
* @param inString is the string to make "safe"
* @return A string with escape sequences
*/
public static String jsSafeString(String inString) {
if (inString != null) {
// Trivial rejection: If a quick indexOf doesn't find any quotes,
// apostrophes or carriage return/linefeeds, no need to do the rest
// of the work
if (inString.indexOf("'") == -1 && inString.indexOf("\"") == -1 &&
inString.indexOf("\r") == -1 && inString.indexOf("\n") == -1) {
return inString; // Just return the string as-is in this case
} else { // Must have found at least one of those characters...
// If there are carriage return/linefeeds in the output data, convert
them to \r\n
// Note that the following commented line was the original, preffered
method of doing this,
// but the replaceAll() method of String is apparently new to JDK 1.4,
and since the
// server this was originally run on was only at JDK 1.3.1, the
following kludge was
// used in place of the replaceAll() method. If this is ever run on a
server at level
// 1.4 or higher, this whole mess should probably be deleted and the
following commented
// line should be activated instead...
// return workString.replaceAll("\r\n", "\\\\r\\\\n"));
String workString = inString.trim();
StringBuffer outString = new StringBuffer(workString.length() *
2);
byte[] workStringBytes = workString.getBytes(); // Get byte
array based on input string
// Begin scanning the byte array looking for "unsafe" data to escape
int i = 0;
while (i < workStringBytes.length) {
if (workStringBytes[i] == '\r' && workStringBytes[i + 1] == '\n') {
// Carriage Return + Linefeed
outString.append("\\r\\n"); // Append the correct escape sequence
i = i + 2; // Move two bytes forward in the source array
} else if (workStringBytes[i] == '\'' && (i == 0 || (i > 0 &&
workStringBytes[i-1] != 92))) { // Apostrophe that isn't already escaped
outString.append("\\'"); // Append the correct escape sequence
i = i + 1; // Move to the next byte in the source array
} else if (workStringBytes[i] == '\"' && (i == 0 || (i > 0 &&
workStringBytes[i-1] != 92))) { // Quotation Mark that isn't already escaped
outString.append("\\\""); // Append the correct escape sequence
i = i + 1; // Move to the next byte in the source array
} else if (workStringBytes[i] == '\\' && (i == 0 || (i > 0 &&
workStringBytes[i-1] != 92))) { // Backslash that isn't already escaped
outString.append("\\\\"); // Append the correct escape sequence
i = i + 1; // Move to the next byte in the source array
} else { // Any other chaacter
// Or if it's not carriage return/linefeed, just append the actual
byte and move on...
outString.append((char)workStringBytes[i]);
i = i + 1; // Move to the next byte in the source array
}
}
// All done, return the final string
return outString.toString().trim();
}
} else { // inString was NULL
return "";
}
} // End safeString()
--
Frank W. Zammetti
Founder and Chief Software Architect
Omnytex Technologies
http://www.omnytex.com
On Wed, January 5, 2005 11:12 am, Krishna Mohan Radhakrishnan said:
>
> Hi all,
> This is a javascript function that is being called when a button called
> "Update" is pressed.
>
> Now if the planTitle or verbalDescription has got any apostrophe(') then
> it is throwing up a javascrit error that ) is expected.
>
> Does not struts handle these type of characters like ',",/ etc.
>
> Does anybody has a solution to the problem?
>
> Regards,
> Krishna Mohan R
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]