0

特殊文字が IE の一部のバージョンでスクリプト エラーを引き起こしているように見えるため、Google アナリティクス タグ内に表示される可能性のある特殊文字を削除しようとしています。私はこの機能を持っています:

                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に関する次の投稿を見てきましたが、これまでのところ、この作業に役立つものは何も見つかりませんでした:

javascriptで(® ´ © ¿ ¡ ° À)特殊文字を処理するには?
javascript regexp remove all special characters
JavaScriptを使用して文字列からスペースを除くすべての特殊文字を削除します

私は JSP と JavaScript を初めて使用するので、コードを適切な場所に配置していないと確信しています。それとも、ページに何か他のものを追加する必要があるのでしょうか? removeSplChars 関数を () 内に配置するか、; を追加しようとしました。そして運がない。残念ながら、私は仕事でこれを学ばなければならないので、時間をかけて言語の論理/構文を真に理解するよりも、与えられたタスクを完了することに集中する必要があります。

4

2 に答える 2

1

問題は関数自体ではなく、別の場所から来ています。証明: http://jsfiddle.net/wDaCw/

于 2012-10-05T13:46:03.870 に答える
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 でそれを行うにはどうすればよいでしょうか。わかりませんが、この問題を抱えたのはあなたが初めてではないことはわかっています。クイック検索でこのページが表示され、次のことが提案されました。

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

さて、私が言ったように、私は JSP に詳しくないので、推測にすぎません。次のように、すべての使用を置き換えてみてください<c:out value="xxx"/>

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

これとともに:

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

それでもうまくいかない場合は、この回答を見てください。

于 2012-10-05T21:19:53.730 に答える