12

ユーザーは適切にエスケープされた URL と生の URL の両方をテキスト入力で私の Web サイトに提供します。たとえば、次の 2 つの URL は同等であると考えています。

https://www.cool.com/cool%20beans
https://www.cool.com/cool beans

<a>後でこのデータを表示するときに、これらをタグとしてレンダリングしたいと思います。指定されたテキストのエンコードとこれらのリンクの取得の間で立ち往生しています:

<a href="https://www.cool.com/cool%2520beans">   <!-- This one is broken! -->
<a href="https://www.cool.com/cool%20beans">

または、それをエンコードせずにこれを取得します:

<a href="https://www.cool.com/cool%20beans">
<a href="https://www.cool.com/cool beans">       <!-- This one is broken! -->

最新のブラウザーでユーザー エクスペリエンスの観点から最善の方法は何ですか? href入力に対してデコード パスを実行するか、属性をエンコードしない上記の 2 番目のオプションを実行するかで迷っています。

4

1 に答える 1

18

リンクの二重エンコードを避けたい場合はurldecode()、両方のリンクで使用できます。その後、「 https://www.cool.com/cool beans」urlencode()などの URL をデコードすると同じ値が返されますが、「」をデコードすると同じ値が返されます。 https://www.cool.com/cool%20beans " はスペースとともに返されます。これにより、両方のリンクが自由に適切にエンコードされます。

strpos()あるいは、関数を使用してエンコードされた文字をスキャンすることもできます。

if ($pos = strpos($url, "%20") {
    //Encoded character found
}

このために理想的には、「%20」の代わりに、一般的なエンコード文字の配列がスキャンされます。

于 2013-04-18T22:54:46.490 に答える