2012-10-05 52 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工作的樣子。