1

私はいつでも次のことをすることを発見しました:

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>';
}

更新: Matt Longに応えて、私はあなたの行に貼り付けました、そしてそれは同じようにレンダリングしました。

更新: Fire Lancerに対応して、元の試みに戻しました。以下に両方を示します。

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は正しいですが、実際のページは、その後に別のスラッシュを付けて解釈します。

解決策: これはすべてrawlurlencode()の結果でした。デコードしたり、エンコードをすべてスキップしたりすると、すべてが完全に機能しました。rawurlencode()に関する何かが、ブラウザに末尾のスラッシュをそこに貼り付けたくなるようにします。

4

7 に答える 7

3

私はそれを一度も経験したことがありません、あなたはどのくらい正確にリンクをエコーし​​ていますか?以下のすべてが機能するはずです。

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:///
于 2008-10-01T15:09:51.547 に答える
2

特に Firefox は、あなたが送信した方法ではめったに見られない方法で html ソースを表示します。明らかに、リンクまたはそのコンテキストに関する何かが、ブラウザーに末尾のスラッシュを解釈させています。

URLエンコーディングの副作用なのかな。rawurldecode を行うと、それが役立ちます。エンコードしたままにしておく必要がある URL の部分がある場合は、スラッシュを検索して元に戻すことができます。

于 2008-10-01T15:43:29.233 に答える
1

エラーは他の場所にある必要があります。echo文字列を逐語的に書き込みます。どの部分でも後処理は行われません。したがって、追加のスラッシュはコードの他の場所に追加されます(文字列をに渡す前echo)。

于 2008-10-01T15:10:03.603 に答える
0

PHPコードにそのechoコマンドを入れると、期待どおりに「http://」が出力されますが(生成された出力のソースで確認できます)、結果のページのリンクにマウスを合わせると(IE7を使用) )、http:///と表示されます。

私の推測では、ホスト名または IP アドレスなしでは http:// リンクが存在できないため、これはブラウザーの動作です (プロトコルにアクセスすることはできません)。

于 2008-10-01T15:40:28.850 に答える
0

二重引用符を使用して、このように内部の二重引用符をエスケープすると、同じ結果が得られますか?

echo "<a href=\"http://\" title=\"bla\">huzzah</a>";
于 2008-10-01T15:18:15.020 に答える
0

一部の人が指摘したように、「http://」は有効なリンクではないため、ブラウザは最後に余分なスラッシュを追加します. それを表示するには、lynx -dump http://yourdomain/yourfile.php (幸運にも Linux を使用している場合) を試すか、ポート 80 でボックスからサーバーに telnet を実行し、次のように入力します。

GET /path/file.php HTTP/1.0

そして結果を見てください。

于 2008-10-01T15:54:34.557 に答える
-1

PHPの構成設定を調べましたか?あなたのために物事をエスケープすることを決定するのは、magic_quotes_gpc かもしれません (特に AJAX/JSON トラフィックを扱う場合は、その設定に何度か噛まれました)。オフになっていることを確認して、もう一度エコーしてみてください (php_flag magic_quotes_gpc off環境によっては、php.ini ファイルを編集するか、作業中のディレクトリにある .htaccess ファイルに追加する必要がある場合があります)。

于 2008-10-01T16:04:27.217 に答える