リンクをエコーし、末尾のスラッシュを取得しますか?
-
03-07-2019 - |
質問
私はいつでも次のことを行うことを発見しました:
echo '<a href="http://" title="bla">huzzah</a>';
最終的にブラウザに表示されるのは次のとおりです:
<a href="http:///" title="bla">huzzah</a>
これは、拡張子が付いたファイルにリンクする場合、リンクが破損するため、特に面倒です。
これがなぜ起こっているのか、どうすれば修正できるのか?
更新: 私の正確な実装について尋ねる人のために、ここにあります。私のトラブルシューティングでは、できる限り馬鹿にしたので、プレーンテキストをプレーンテキストに連結する場所を気にしないでください...
function print_it($item) {
echo '<div class="listItem clearfix">';
echo '<div class="info">';
echo '<span class="title">';
if(isset($item[6])) {
echo '<a href="http://" title="">' . 'me' . '</a>';
}
echo '</span>';
echo '</div></div>';
}
更新: マットロングへの応答として、私はあなたの行に貼り付け、同じようにレンダリングしました。
更新: ファイヤーランサーへの応答として、私は元の試みに戻しました。以下に両方を示します。
echo substr($item[6],13) . '<br>';
echo '<a href="http://' . substr($item[6],13) . '" title="' . $item[0] . '">' . $item[0] . '</a>';
<span class="title">www.edu.gov.on.ca%2Feng%2Ftcu%2Fetlanding.html<br>
<a href="http://www.edu.gov.on.ca%2Feng%2Ftcu%2Fetlanding.html" title="Employment Ontario">Employment Ontario</a></span>
substr'ingの理由は、URLが他の場所でrawurlencode()を介して実行されるためです。http%3A%2F%2Fにリンクすると、ページはローカル/相対リンクであると見なされます。
更新: 実際に見ずに上記の応答を貼り付けました。そのため、ソースを表示するときのHTMLは正しいですが、実際のページでは、HTMLの後に後続のスラッシュが追加されて解釈されます。
解決策: これはすべてrawlurlencode()の結果でした。デコードした場合、またはエンコードをすべてスキップした場合、すべてが完全に機能しました。 rawurlencode()に関する何かが原因で、ブラウザは末尾にスラッシュを付けたいと考えています。
解決
Firefoxは、特にHTMLソースを表示する方法で表示しますが、送信した方法はめったにありません。リンクまたはそのコンテキストについて明らかに何かがブラウザに後続のスラッシュを解釈させています。
それはURLエンコーディングの副作用なのだろうか。 rawurldecodeする場合、それが役立ちます。エンコードされたままにする必要があるURLの部分がある場合は、スラッシュを検索して、それらを元に戻すことができます。
他のヒント
これまで経験したことはありませんが、リンクをどの程度正確にエコーしていますか?次のすべてが機能するはずです。
echo '<a href="http://someothersite.com">Link</a>';
echo '<a href="anotherpage.php">Some page</a>';
echo '<a href="../pageinparentdir.php">Another page</a>';
etc
編集、情報を追加したため。
http://をhrefとして持つことはできません。そのリンクをhtmlページに直接入力することでも効果があります。
例:
html:
<a href="http://" title="bla">huzzah</a>
リンク(FF3内):
http:///
エラーは他の場所にある必要があります。 echo
は文字列を逐語的に書き込みます。どの部分でも後処理は行われません。そのため、追加のスラッシュはコードの他の場所に追加されます(文字列を echo
に渡す前)。
二重引用符を使用し、このように内部二重引用符をエスケープしても同じ結果が得られますか?
echo "<a href=\"http://\" title=\"bla\">huzzah</a>";
このエコーコマンドをPHPコードに挿入すると、&quot; http://&quot;が出力されます。予想どおり(生成された出力のソースで確認できます)、結果のページ(IE7で)のリンクにマウスを合わせると、 http:/// 。
ホスト名またはIPアドレスなしでhttp://リンクを作成することはできません(プロトコルにアクセスすることはできません)ので、それはブラウザーの動作です。
一部の人が指摘したように、「http://」は有効なリンクではないため、ブラウザは最後に追加のスラッシュを追加します。それを見るには、lynx -dump http://yourdomain/yourfile.php を試してください(幸運ならlinuxを使用するのに十分)またはボックスからポート80でサーバーにtelnetして、これを入力します:
GET /path/file.php HTTP/1.0
結果を見てください。
PHPの構成設定を確認しましたか? magic_quotes_gpcがあなたのために物事をエスケープすることを決定するかもしれません(特にAJAX / JSONトラフィックで作業しているとき、私はその設定に何度か噛まれました)。オフになっていることを確認して再度エコーしてみてください(環境によっては、php.iniファイルを編集するか、作業中のディレクトリの.htaccessファイルに php_flag magic_quotes_gpc off
を追加する必要がある場合があります。 )。