I\'m trying to remove special characters that could appear within my Google Analytics tags, as the special characters seem to be causing script errors in some versions of IE
In a comment I asked you to show us the code where your function removeSplChars
was called, and to my surprise you told me that you didn't call it anywhere. Well, that answers the question why nothing has changed. If you don't call the function with the data you want to change, then nothing get changed.
I'm trying to understand what your problem is, because it shouldn't be a problem... Then I looked closer to your code and spotted this:
'<c:choose><c:when test="${WCParam.source eq 'search'}">Search <c:out value="${WCParam.searchTerm}" /></c:when><c:otherwise><c:out value="${topCat}" />|<c:out value="${subCatA}" />|<c:out value="${subCatB}" />|<c:out value="${subCatC}" /></c:otherwise></c:choose>'
You should notice that the color coding has made the word search
in another color than the rest of the string. This is because you have started the string with a single quote and therefore the string will end at the next single quote.
I notice that you are using JSP, which I'm not familiar with. I looked it up and saw that these tags are parsed by your server before they are sent to the client, and replaced with some text.
Since you have problems with special characters like a single quote, the problem is obvious: The string that your tags output isn't escaped to be a part of a javascript string. I think your only problematic characters of all possible Unicode characters is a double quote (u+0022), single quote (u+0027) and backslash (u+005c), because they must be escaped with a backslash (like \"
, \'
and \\
)
Now, how do you do that in JSP? I don't know, but I know that you aren't the first one to have this problem. I quick search gave me this page where they suggest the following:
<spring:message code="${escapedString}" javaScriptEscape="true"/>
Now, as I said, I'm not familiar with JSP, so I am only guessing. Try to replace all your uses of <c:out value="xxx"/>
like this:
<c:out value="${WCParam.searchTerm}" />
with this:
<spring:message code="${WCParam.searchTerm}" javaScriptEscape="true"/>
If that doesn't work look at this answer.
The problem is not the function itself, it comes from somewhere else. Proof: http://jsfiddle.net/wDaCw/