0

私はこのリンクを持っています。

echo '<a href="?country=Estonia&from_language=Russian&into_language=Latvian&submitted=true&
page='.$x. '">'.$x.'</a> ';

しかし、エストニア、ロシア語、ラトビア語の名詞を、$country、$from_language、$into_language などのスカラー変数に置き換える必要があります。

ドットと一重引用符と二重引用符の可能なすべての組み合わせを試しました。いつも構文エラーが発生します。そこに変数を埋め込む方法がわかりません。

誰か知ってる?

ありがとうございました

4

6 に答える 6

8

http_build_queryDocsを使用してください。

<a href="?<?php echo http_build_query(array(
    'country' => $country,
    'fromLanguage' => $fromLanguage,
    'somethingElse' => $somethingElse,
    '...' => '...'
), '', '&amp;'); ?>">Link</a>
于 2012-06-05T08:15:56.557 に答える
3

sprintfまたはのような簡単なものを使用してprintfください。

例えば:

printf('<a href="?country=%s&from_language=%s&into_language=%s&submitted=true&
page=%s">%s</a>', $country, $fromLanguage, $toLanguage, $pageID, $dispText);

次のような二重引用符記号を使用したエンコードなどを使用することもできます。

echo "<a href=\"?country={$country}&from_language={$fromLanguage}&into_language={$toLanguage}&submitted=true&
    page={$pageID}\">{$dispText}</a>"
于 2012-06-05T08:14:07.790 に答える
1

HTML を出力するスクリプトを作成する場合は、引数セパレーターの出力設定を構成することを検討してくださいarg_separator.output

ini_set('arg_separator.output', '&amp;');

次に、次を使用して URI クエリ情報パスを簡単に作成できますhttp_build_query

$country = 'de';
$fromLanguage = 'en_EN';

?>

<a href="?<?php echo http_build_query(compact('country', 'fromLanguage')); ?>">Link</a>

これにより、インジェクションの影響を受けない、完全に有効にエンコードされた出力が得られます。

<a href="?country=de&amp;fromLanguage=en_EN">Link</a>

フルデモ

于 2012-06-06T11:10:07.130 に答える
1

極端に単純でない場合は、変数を文字列に直接入れることは避けてください。代わりに連結を使用し、何か良いものを作りたい場合は文字列をエスケープします。

echo '<a href="?country=' . htmlentities($country) . 
     '&from_language=' . htmlentities($from_language) . 
     '&into_language=' . htmlentities($into_language) . 
     '&submitted=true&page=' . intval($x) . '">' . htmlentities($x) . '</a> ';

とにかく、本当に複雑な方法が必要な場合は、HTML 属性に二重引用符が必要であることを考慮する必要がありますが、変数を入れたいため、PHP 文字列をラップするには二重引用符が必要です。したがって、HTML の二重引用符をエスケープする必要があります。試す:

echo "<a href=\"?country={$country}&from_language={$from_language}&into_language={$into_language}&submitted=true&page=" . $x . '">' . $x . '</a> ';
于 2012-06-05T08:13:59.867 に答える
1

Corbin と KoolKabin の回答を組み合わせると、この読みやすいスニペットが得られます。

printf('<a href="%s">%s</a>',
       htmlspecialchars(
           http_build_query(array(
                                  'country' => $country,
                                  'from_language' => $from_language,
                                  'into_language' => $into_language,
                                  'submitted' => 'true',
                                  'page' => $x
                                  ))
                        ),
       htmlspecialchars($x));

パラメータ化

printfsprintfは、文字列にパラメーターを追加するのに非常に便利です。文字列自体を読み取れなくすることなく、エスケープ値や複雑な値を簡単に追加できます。最初のパラメーターによって、いつでも一目でどの文字列であるかを確認できます。

http_build_queryもパラメーター化の方法ですが、クエリ文字列用です。主な用途は、クエリ文字列の構文にまったく集中する必要がないことです。

逃げる

htmlspecialcharsは、データが HTML コードへの挿入に適していることを確認します。これは、SQL インジェクションを回避するために SQL クエリでエスケープするのと似ていますが、ここでのみ HTML インジェクション (XSS またはクロスサイト スクリプティングとも呼ばれます) を回避します。

http_build_query は、ブラウザーのアドレス フィールドにURL として挿入するためにすべての値がエスケープされることを自動的に確認します。これは、 HTML コードへの挿入の適合性を保証するものではありません。したがって、クエリ文字列にも htmlspecialchars が必要です。

于 2012-06-05T08:23:07.310 に答える
-1
$country = 'Estonia';
$from_language = 'Russian';
$into_language = 'Latvian';
echo '<a href="?country='.$country.'from_language='.$from_language.'&into_language='.$into_language.'&submitted=true&page='.$x. '">'.$x.'</a> ';

また

echo "<a href=\"?country=$country&from_language=$from_language&into_language=$into_language&submitted=true&page=$x\">$x</a>";

また

echo "<a href=\"?country={$country}&from_language={$from_language}&into_language={$into_language}&submitted=true&page={$x}\">{$x}</a>";
于 2012-06-05T08:14:46.590 に答える