1

W3Cバリデーターを介してページを実行すると、次のエラーが発生します。

=引用符で囲まれていない属性値。考えられる原因:属性が一緒に実行されているか、引用符で囲まれていない属性値のURLクエリ文字列。

このエラーの原因となっているコードは次のとおりです。

$prevPage = "?main=men&category1=1&pagenum=$prevp"."&lowRowNum=$prev_page_low".
                    "&highRowNum=$prev_page_high";

print("<a class='left' href=$prevPage>".
                    "Previous Page</a>&nbsp;&nbsp;&nbsp;");

他のどのPHPスクリプトでもこのようなエラーは発生しないので、ここで間違っているのは特定の問題だと思いますか?

このコードがこのエラーを引き起こしている理由を誰かが理解できますか?

私はこれを調査し、HTMLの特殊文字に起因する可能性があることを読みましたか?私はわかりません..

ありがとうございました

4

2 に答える 2

5

単に試してください:

<a class='left' href='$prevPage'>

引用符に注意してください。HTML では常に属性を引用するようにしてください。より良い方法は次のとおりです。

echo '<a class="left" href="' . $prevPage . '">' //etc etc;

一重引用符と二重引用符を使用すると混乱する可能性があるため、HTML 文字列全体をエコーし​​ないようにしてください。

于 2012-04-30T16:22:13.713 に答える
2

printf()ここでとの組み合わせを使用することをお勧めしhtmlentities()ます。

printf(
  '<a class="left" href="%s">Previous Page</a>'
    , htmlentities($prevPage)
);

printf()文字列を受け取り、echo特別にフォーマットされたトークンを置き換えた後に s します。上記の例では、文字列に 1 つのトークンがあり、 として表され%sます。

実行するprintf()と、各トークンが対応するパラメーターに置き換えられます。上記の例では、%sは の結果に置き換えられhtmlentities($prevPage)ます。

のマニュアル ページにsprintf()は、トークンがどのように機能するかについての詳細が記載されており、さらに多くの例があります (sprintf()とは、書式設定された文字列を返し、それを直接出力するprintf()点を除いて同じです)。sprintf()printf()

などのエンティティが&マークアップ検証のために正しくエンコードされていることを確認するには、htmlentities().

于 2012-04-30T16:38:34.013 に答える