0

引用符が含まれる URL へのリンクを表示するのに問題があり、stackoverflow に例がたくさんあるにもかかわらず、解決策がわかりません! データベースに保存している正確な文字列は次のとおりです(Adelaide Antarticaを示しています)

https://www.google.com/maps/place/67%C2%B007 '27.3%22S+68%C2%B008'56.0%22W/@-67.1447827,-68.3886741,71373m/data=!3m1!1e3! 4m5!3m4!1s0x0:0x0!8m2!3d-67.124258!4d-68.148903

それをhrefに入れてみると、リンク先...

https://www.google.com/maps/place/67%C2%B007 (つまり、最初の一重引用符で区切ります)

しかし、私は href="en​​codeURI(theLink)" または href="en​​codeURIComponent(theLink)" を使用してみましたが、それは同じものにリンクしています (間違った方法で考えていて、同じ問題があった場合に備えて、デコード オプションも試しました)。 .

ここで続行するための最良の方法に関する推奨事項はありますか? 非推奨の「エスケープ」機能も試しましたが、これも機能しません。考えてくれてありがとう!

(おかしなことに、私がこれを書いているとき、スタックオーバーフローのリンクでさえまったく同じように壊れていることがわかります-おそらくそれは不可能ですか?!)


編集: Clemzd の要求に応じて - リンクの作成に d3 を使用しているので、これを実行しています...

anElement.append("text").html("<a href='" + myData[i].url + "'> a link name </a>");

encodeURI(myData[i].url) を実行するかどうかに関係なく、単一引用符でリンクする以外はすべてうまく機能します

4

2 に答える 2

2

一重引用符を使用して属性の値を区切り、値にhrefエスケープされていない一重引用符を含めることはできません。これは、URL エンコーディングではなく、HTML マークアップ エンコーディングの問題です。

一重引用符と二重引用符の使用を逆にするか (エンコードされた URL には二重引用符を含めることはできませんが、一重引用符を含めることはできます)、URL 内の一重引用符を のような文字エンティティに置き換えることができます&#39;。による URL エンコーディング%27も機能しますが、これは標準のエンコーディングでencodeURIComponentはありません。

于 2016-06-21T18:41:40.183 に答える
1

問題を解決する方法はたくさんあります。知っておく必要があるのは、入力に ' が含まれている可能性がある場合は、この文字をエスケープする必要があるということだけです。そうしanElement.append("text").html("<a href='" + https://www.google.com/maps/place/'link + "'> a link name </a>");ないと、'.

リンクに " が含まれていないことが確実な場合は、コードを変更して " を連結演算子として使用してください。

そうでない場合は、サーバー側またはクライアント側で ' をエスケープできます。たとえば、クライアント側では次のことができます。

function escapeJavascript(input){
 return input.replace(/\\n/g, "\\n")
        .replace(/\\'/g, "\\'")
        .replace(/\\"/g, '\\"')
        .replace(/\\&/g, "\\&")
        .replace(/\\r/g, "\\r")
        .replace(/\\t/g, "\\t")
        .replace(/\\b/g, "\\b")
        .replace(/\\f/g, "\\f");
}

そして、次のように使用します。anElement.append("text").html("<a href='" + escapeJavascript(myData[i].url) + "'> a link name </a>");

于 2016-06-21T22:03:57.233 に答える