2012-10-05 56 views
0

我试图删除可能出现在我的Google Analytics代码中的特殊字符,因为特殊字符似乎在某些版本的IE中导致脚本错误。我有这样的功能:JavaScript删除特殊字符字符串不工作

   function removeSplChars(inStr) { 
       inStr = inStr.replace(/[^a-zA-Z0-9 ]/g, ""); 
       return inStr; 
       } 

而且是当前工作的GA代码:

   <script type="text/javascript"> 
       var _gaq = _gaq || []; 
       _gaq.push(['_setAccount', '<c:out value="${profileId}"/>']); 
       <c:choose> 
       <c:when test="${(lastCmdName eq 'CategoryDisplay') or (lastCmdName eq 'ProductDisplay')}" > 
       _gaq.push(['_setCustomVar', 
       2, // This custom var is set to slot #2. 
       '<c:choose><c:when test="${WCParam.source eq 'search'}">Search</c:when><c:otherwise><c:out value="${topCat}" /></c:otherwise></c:choose>', // The top-level name for your online content categories. 
       '<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>', // Records value of breadcrumb name 
       3 // Sets the scope to page-level. 
       ]); 
       </c:when> 
       <c:otherwise> 
       </c:otherwise> 
       </c:choose> 
       _gaq.push(['_trackPageview']); 
       (function() { 
       var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
       ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
       var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
       })(); 
       </script> 

但是,当我把代码内的功能,我仍然看到特殊字符在Chrome调试器来了。例如,当我拉起一个名为“Matt's”的产品的页面时,它显示为Matt ' s。我想要的是Matts。我们有其他产品名称与&符号和其他特殊字符,所以我只想让A-Z和数字(盖帽/没有盖帽都OK)

任何意见,将不胜感激。我已经看了看所以下面的职位,但到目前为止还没有发现任何东西,可以帮助我,使这项工作:

How to handle (® ´ © ¿ ¡ ° À) special characters in javascript?
javascript regexp remove all special characters
Remove all special characters except space from a string using JavaScript

我是新来的JSP和JavaScript,所以我相信我”没有把代码放在正确的位置,或者我需要在页面上添加其他内容?我试过在()中放置removeSplChars函数或添加一个;并没有运气。不幸的是,我必须在工作中学习这一点,所以我必须专注于完成我已经完成的任务,而不是花时间真正理解语言的逻辑/语法。

+0

向我们展示您调用'removeSplChars'的代码。 – some

+0

您可以用三元表达式替换内嵌的'c:choose'块。例如:'$ {WCParam.source eq'search'? '搜索':'topCat'}' –

+0

@some,这是整个问题,我不会在任何地方调用它。我是一个JavaScript的总noobot :(我将研究如何调用一个函数,看看我找到了什么,谢谢 – surfbird0713

回答

1

问题不在于函数本身,它来自其他地方。证明:http://jsfiddle.net/wDaCw/

+0

我想我我只是没有正确地实现它,你能否告诉我应该把函数放在上面粘贴的脚本标记中?也许它需要一起进入另一个JSP文件... – surfbird0713

+0

我有另一个.JSP GA脚本放在锚标签上;当我将该功能放在该页面上时,它也不会删除特殊字符。 – surfbird0713

0

在评论中,我问你向我们展示了函数removeSplChars被调用的代码,令我惊讶的是你告诉我你没有在任何地方调用它。那么,这就回答了为什么没有改变的问题。如果你不用你想改变的数据调用函数,那么没有什么改变。

我试图理解你的问题是什么,因为它不应该是一个问题......然后我看着更接近你的代码,并看准了这一点:

'<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>' 

你应该注意到的颜色编码使字search以另一种颜色而不是字符串的其余部分。这是因为您已经使用单引号开始了字符串,因此字符串将在下一个单引号处结束。

我注意到你正在使用我不熟悉的JSP。我查了一下,发现这些标签在发送到客户端之前由服务器解析,并用一些文本替换。

既然你有特殊字符像一个单引号的问题,这个问题是显而易见的:自己的代码输出没有逃脱成为一个JavaScript字符串的一部分的字符串。我认为所有可能的Unicode字符中唯一有问题的字符是双引号(u + 0022),单引号(u + 0027)和反斜线(u + 005c),因为它们必须用反斜线进行转义(如\",\'\\

现在,你如何在JSP中做到这一点?我不知道,但我知道你不是第一个有这个问题的人。我快速搜索给了我this page,他们建议如下:

<spring:message code="${escapedString}" javaScriptEscape="true"/> 

现在,正如我所说,我不熟悉JSP,所以我只是猜测。试图取代的<c:out value="xxx"/>你的所有用途是这样的:

<c:out value="${WCParam.searchTerm}" /> 

与此:

<spring:message code="${WCParam.searchTerm}" javaScriptEscape="true"/> 

如果不能在this answer工作的样子。