0

次の変数をテキストとして使用してリンクをレンダリングしようとしているビューがあります。

<ul data-role="listview" data-inset="true" data-filter="true" data-filter-placeholder="Search ideas...">
   <% @ideas.each do |idea| %>
     <li>
       <%= link_to(idea.name + " for " + idea.relationship.name, idea_path(idea) ) %>
     </li>
  <% end %>
</ul>

値 idea.name (PG SQL から取得) には単一引用符が含まれています。これにより、リンクがクリックされたときに JavaScript の問題が発生します。

Uncaught SyntaxError: Unexpected identifier jquery-1.7.1.min.js:2
e.extend.globalEval jquery-1.7.1.min.js:2
e.extend.globalEval jquery-1.7.1.min.js:2
bp jquery-1.7.1.min.js:2
e.extend.each jquery-1.7.1.min.js:2
f.fn.extend.domManip jquery-1.7.1.min.js:4
f.fn.extend.append jquery-1.7.1.min.js:3
f.each.f.fn.(anonymous function) jquery-1.7.1.min.js:4
a.mobile.loadPage.a.mobile.allowCrossDomainPages.l.isSameDomain.a.ajax.success jquery.mobile-1.1.0.min.js:58
f.Callbacks.n jquery-1.7.1.min.js:2
f.Callbacks.o.fireWith jquery-1.7.1.min.js:2
w jquery-1.7.1.min.js:4
f.support.ajax.f.ajaxTransport.send.d

escape_javascript適切な結果が得られないものを使用しようとしました (\一重引用符の前に a を置き、ブラウザーでレンダリングされ、リンクは依然としてエラーになります。

Rails 3.1、jQuery Mobile 1.1.0、および jQuery 1.7.1 を使用しています。任意の提案をいただければ幸いです。

更新: クライアントでレンダリングされた応答は次のようになります。

<ul data-role="listview" data-inset="true" data-filter="false">
   <li><a href="/ideas/34">toms shoes</a></li>
   <li><a href="/ideas/32">Toms shoes</a></li>
   <li><a href="/ideas/35">Remote controlled boat</a></li>
   <li><a href="/ideas/36">Toms Shoes</a></li>
   <li><a href="/ideas/33">Tom's shoes</a></li>
</ul>

問題のある最後の項目 (/ideas/33) です。

4

1 に答える 1

0

jquery モバイルでも同様の問題に直面しました。
次のHTMLがありました:

<ul id="searchPanel" data-role="listview" data-filter="true" class="inputData" data-filter-reveal="true"
                    data-filter-placeholder="I'm looking for...">

JQM はこれを DOM で次のようにレンダリングしました。

<input data-type="search" placeholder="I" m="" looking="" for...'="" data-lastval="">

私の解決策は、単一引用符の代わりに「または」を使用することでした。https://docs.webplatform.org/wiki/html/entities#HTML_Entities_Table
を参照して、 以下はアポストロフィまたは単一引用符として使用される近似一致です。

&lsquo; OR &rsquo; OR &prime;

次のように表示されます: ' OR ' OR ' (3 つすべてが単一引用符 ' とは異なりますが、似ています)

そのため、回避策として、PG SQL から取得したテキスト内の一重引用符を置き換え、上記の 3 文字のいずれかを置換として選択する必要があります。

于 2015-01-06T05:41:30.043 に答える