0

可能重复:
JavaScript 删除特殊字符串不起作用

我正在尝试删除发送到 Google Analytics 的动态填充值中的特殊字符;' 在某些产品(如“Matt's”)中会导致 JS 错误。

这对我来说尤其具有挑战性,因为我并不真正了解 JavaScript 或 JSP。我编写了以下代码,但没有达到预期的效果。还有另一种方法可以做到这一点吗?我必须直接在锚标记中修改自定义变量和 _trackEvent 调用。下面是自定义变量的代码:

                <script type="text/javascript">
                function removeSplChars(inStr) {
                inStr = inStr.replace(/[^a-zA-Z0-9 ]/g, "");
                return inStr;
                }
                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>
                removeSplChars('<c:out value="${topCat}" />', '<c:out value="${subCatA}" />', '<c:out value="${subCatB}" />', '<c:out value="${subCatC}" />');
                 _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>

举个例子,在用 // Records value of breadcrumb name注释的行中, Google 正在输出如下代码:

[2,Kitchen Tools,Kitchen Tools|Textiles|Chef& # 0 3 9 ; s Apron|,3]"(当然符号之间没有空格)

我正在寻找的是
[2,厨房工具,厨房工具|纺织品|厨师围裙|,3]“

我尝试在语句中添加 escapeXml="false" ,但这给了我一个“意外标识符”错误,没有详细信息。

现在,我也尝试了下面的代码。我希望它用测试替换特殊字符,但没有任何反应。

                    <script type="text/javascript" src="<c:out value="${jspStoreImgDir}javascript/Util.js"/>">
                    String.prototype.unescapeHtml = function () {
                        var temp = document.createElement("li");
                        temp.innerHTML = this;
                        var result = temp.childNodes[0].nodeValue;
                        temp.removeChild(temp.firstChild);
                        return result;}
                    '<c:out value="${catNameDisplay}" />'.unescapeHtml().replace((/[^a-zA-Z0-9 ]/g, 'test');

                    </script>

任何帮助深表感谢。我整天都在研究这个问题,但找不到解决方案。

4

3 回答 3

0

抱歉,之前的回答很愚蠢。我道歉。它应该做的恰恰相反。

我在这里注意到的一件事是您可能会向该removeSplChars方法传递多个参数。函数的结构方式,它只会修复第一个字符串。

另外..正在返回“固定”字符串,而您假设它将被内联修复

你正在做类似的事情:

removeSplChars(arg1, arg2, arg3, arg4);

并期望 , arg1, arg2,arg3arg4是固定的,然而,它们不是。更好的是:

arg1 = removeSplChars(arg1);
arg2 = removeSplChars(arg2);
arg3 = removeSplChars(arg3);
arg4 = removeSplChars(arg4);

好的,所以这“应该”解决您的问题。玩得开心!

于 2012-10-05T19:34:54.923 回答
0

它可以像这样逃脱:

<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> ${fn:escapeXml(myString)}

于 2012-10-05T19:41:29.380 回答
0
String.prototype.unescapeHtml = function () {
    var temp = document.createElement("div");
    temp.innerHTML = this;
    var result = temp.childNodes[0].nodeValue;
    temp.removeChild(temp.firstChild);
    return result;
}

'&#039'.unescapeHtml().replace(/[^0-9a-zA-Z]/gi, '');

我从http://paulschreiber.com/blog/2008/09/20/javascript-how-to-unescape-html-entities/获得了 unescapeHtml 代码,并在取消转义后应用了正则表达式来删除特殊字符。

试试看。只需替换我为您的变量设置的字符串即可。

于 2012-10-05T20:24:58.100 回答