可能重复:
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>
任何帮助深表感谢。我整天都在研究这个问题,但找不到解决方案。