変数を連結するのに最適なのはどれですか – PHP – SitePoint Forums

ハローハウスさん
私は常に中括弧を使用して変数を結合するコードを書いてきましたが、それは私にとって単純で簡単になるためですが、削除されるか、将来のバージョンのphpで問題が発生すると考えています.
例。

$data = "This is where you show {$_POST['road']} and is better to {$_POST['read']} and click HERE

連結を使用して記述すると、紛らわしい例に見えます。

$data = "This is where you show $_POST['road']". and is better to".$_POST['read'] and click HERE

安全に使用でき、多くの新しいバージョンのphpにとどまることができる2つの方法のうち、どちらが優れていますか?
ありがとう


二重引用符で囲まれた文字列内に php 変数を配置しても、削除されることはありません。

楽しい事実: php が最初の例を解析するとき、生成されるバイトコードは次のとおりです。 まさに 2番目の例と同じです(ところで、いくつかの ” と . が欠けています。)

セキュリティは、値が使用されているコンテキスト次第です。



1 いいね

それが私が最初のものを好む理由です。特に、1行で二重引用符と単一引用符を使用する必要がある場合に、コードをきちんと理解しやすくします

2番目の紛らわしい例ではなく、ずっとそのようにコーディングします

私は常に最初の方法を提案してきました。

2 番目のエラーは、構文の強調表示を備えた適切な IDE がなく、読み書きが「難しい」場合に特にエラーが発生しやすくなります。



1 いいね

この文脈では、私は次のことに注意します $_POST データを直接文字列に。 その文字列に何が起こるかによって異なりますが。 もしそれがウェブページに印刷されるなら、私はおそらく実行したいと思うでしょう htmlspecialchars() その上で。
それは文字列ポスト連結に対して行われるかもしれませんが。



1 いいね

はい、まさにそれが、このような内部で他の関数を使用できないため、方法2が役立つ唯一の方法です

$data = "htmlspecialchars($_POST['test'])";

echo $data;

したがって、私が通常行うことは、ポスト変数を外部でサニタイズしてから、中括弧内で使用することです。

$postdata = htmlspecialchars ($_POST['test']);
$data = " This is the link";
echo $data;

最悪の場合、データを追加して、エコーアウトするときに htmlspecialchar() を使用できます。 例


$data = " This is the link";
echo htmlspecialchar ($data);

文字列が解析され、php でそれを行う必要がないため、テキストを完全引用符で囲むことは避けます。 テキストを一重引用符で囲み、変数を引用符なしまたは引用符で囲みます。

$data="This is where you show ".$_POST['road'].' and is better to '.$_POST['read'].' and click HERE';

しかし、私は文字列を書きません $_POST それらの変数は常に設定されるとは限らないためです。 なぜエラーをスローする可能性のあるコーディングを書くのでしょうか? イチイ $_POST 変数を画面にエコーする必要がある場合は、次に関係なくエコーできる変数を使用するように設定します。 $_POST 州。

$road = (!empty($_POST['road']) ? $_POST['road'] : '');
$read = (!empty($_POST['read']) ? $_POST['read'] : '');
$linkway = (!empty($_POST['linkway']) ? $_POST['linkway'] : '');

そして、引用符の外で再びエコーします。

$data="This is where you show ".$road.' and is better to '.$read.' and click HERE';

いくつかのチェックを実行したい場合 $_POST 変数を設定するときにできる値。

$road = (!empty($_POST['road']) ? htmlspecialchar($_POST['road']) : '');
$read = (!empty($_POST['read']) ? htmlspecialchar($_POST['read']) : '');
$linkway = (!empty($_POST['linkway']) ? htmlspecialchar($_POST['linkway']) : '');



1 いいね

列がそこにあることを知っていたとしても、ポスト変数とデータベースクエリからのデータを含むすべての変数に対して !empty() を使用しているのは私だけだと思います。 しかし、ある時点で、ifステートメントでサーバーに多くの処理を与えていると感じ始めますが、それは私を助けたり、不必要な変数が定義されていないエラーを解決したりします。

私はいつもあなたが指示したように書いていますが、上で書いた例では、私が尋ねた連結の質問のためだけにそれをしました。

そして、設定されているかどうかを知るために使用する変数のチェックに問題がないことを確認してくれてありがとう。

これは、既に文字列に含まれている HTML をエンコードするため、機能しません*。

*HTML チュートリアルのようなものを作成している場合を除きます。 欲しいです ページに HTML コードを表示します。

はい、そうです、href は取り除かれます

このトピックは、最後の返信から 91 日後に自動的にクローズされました。 新しい返信は許可されなくなりました。

Leave a Comment

Your email address will not be published. Required fields are marked *