繁体   English   中英

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

[英]JavaScript Remove special characters string not working

我正在尝试删除可能出现在我的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的产品。 我想要的是Matts。 我们还有其他带有&符号和其他特殊字符的产品名称,因此我只想允许使用字母和数字(大写/无大写字母都可以)

任何意见,将不胜感激。 我看过以下关于SO的帖子,但到目前为止,找不到任何可以帮助我完成这项工作的内容:

如何处理(®´©¿¡À)javascript中的特殊字符?
javascript regexp删除所有特殊字符
使用JavaScript从字符串中删除除空格以外的所有特殊字符

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

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

在评论中,我要求您向我们展示调用函数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中做到这一点? 我不知道,但是我知道您不是第一个遇到此问题的人。 我快速搜索给了我这个页面 ,他们在其中提出以下建议:

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

现在,正如我所说,我对JSP并不熟悉,所以我只是在猜测。 尝试像这样替换所有对<c:out value="xxx"/>用法:

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

有了这个:

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

如果这不起作用,请查看此答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM