JavaScript删除特殊字符串不起作用

时间:2012-10-05 13:37:08

标签: javascript jsp special-characters analytics

我正在尝试删除可能出现在我的Google Analytics代码中的特殊字符,因为特殊字符似乎在某些版本的IE中导致脚本错误。我有这个功能:

                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。我想要的是马特。我们还有其他带有&符号和其他特殊字符的产品名称,所以我只想允许A-z和数字(上限/无上限)

任何建议都将不胜感激。我已经在SO上查看了以下帖子,但到目前为止还没有找到任何可以帮助我完成这项工作的帖子:

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函数放在()中或添加;没有运气不幸的是,我必须在工作中学习这一点,所以我必须专注于完成我给予的任务,而不是花时间真正理解语言的逻辑/语法。

2 个答案:

答案 0 :(得分:1)

问题不在于功能本身,而是来自其他地方。证明:http://jsfiddle.net/wDaCw/

答案 1 :(得分: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字符串的一部分。< / strong>我认为你所有可能的Unicode字符中唯一有问题的字符是双引号(u + 0022),单引号(u + 0027)和反斜杠(u + 005c),因为它们必须使用反斜杠进行转义(如{ {1}},\"\'

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

\\

现在,正如我所说,我不熟悉JSP,所以我只是在猜测。尝试将<spring:message code="${escapedString}" javaScriptEscape="true"/> 的所有用法替换为:

<c:out value="xxx"/>

用这个:

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

如果不起作用,请查看this answer