0

私のWebアプリケーションが次のタグをレンダリングするとします。

<object type="application/x-pdf" data="http://example.com/test%2Ctest.pdf">
     <param name="showTableOfContents" value="true" />
     <param name="hideThumbnails" value="false" />
</object>

属性をエスケープする必要がdataありますか(パーセントエンコードされたパス)、またはしませんか?私の例ではそうです。仕様が見つかりません。

補遺

data実際、属性を消費するブラウザプラグインがそこで何を期待すべきかについての仕様に興味があります。たとえば、Adobe Acrobatプラグインは、エスケープされたuriとエスケープされていないuriの両方を取ります。ただし、QWebPluginFactoryは、属性を人間が読み取れるURI(エスケープされていない)として扱いdata、それにより2パーセントのエンコードが発生します。そして、それがバグなのかどうか疑問に思いQWebPluginFactoryます。

4

2 に答える 2

1

data属性は、値がURIであることを想定しています。したがって、構文的に有効なURIである値を指定する必要があります。

URIの現在の仕様はRFC3986です。,URIのパスをエンコードする必要があるかどうかを確認するには、パス生成ルールがどのように定義されているかを確認してください。

path          = path-abempty    ; begins with "/" or is empty
              / path-absolute   ; begins with "/" but not "//"
              / path-noscheme   ; begins with a non-colon segment
              / path-rootless   ; begins with a segment
              / path-empty      ; zero characters

権限情報を含むURIがあるため、パスが空であるかどうかを確認する必要があります(URI生成ルールを参照)。

path-abempty  = *( "/" segment )

セグメントは、次のように定義された0個以上のpchar文字です(私はすでにプロダクションルールを拡張しました):

pchar         = ALPHA / DIGIT / "-" / "." / "_" / "~" / "%" HEXDIG HEXDIG / "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" / ":" / "@"

ご覧のとおり、pcharはリテラルに展開されます,,したがって、パスコンポーネントでをエンコードする必要はありません。ただし、パーセントエンコードを使用して、その意味を変更せずに非区切り文字をエンコードすることが許可されているため、%2Cの代わりに使用することをお勧めします,

于 2011-04-01T10:34:33.300 に答える
0

通常、URLには特定の文字のみを含めることができます。残念ながら、仕様が異なれば、予約済みと見なされて使用できない文字のリストも異なります。

あなたの例では、エンコードされた文字はコンマ(,)であり、これは一部の仕様では予約文字であるため、エンコードするのは間違いではありません。

ほとんどのWebサーバーは、エンコードされていないコンマとエンコードされたコンマを同等に処理する必要がありますが、構成によってはそうでないものもあります。そのため、最初からファイル名に特殊文字を含めないようにすることをお勧めします(例のように)。

GETパラメータに特殊文字がある場合は、常にURLエンコードが必要です。たとえばC&A、値として受け取ることがサポートされているGETパラメータは、次のように記述する必要があります。

http://example.com/somescript.php?value=C%26A

編集:

プラグイン(またはブラウザ)はどちらの方法も気にしません。彼らはそれやそのようなものをデコードしようとはしません(またはデコードする必要はありません)。サーバーから入力されたURLを要求するだけです。

于 2011-03-31T11:15:45.447 に答える