-6

PHP での print または echo の結果は、数値であるか、常に文字列であるか。例えば:

これはPHPコードです:

<?php
    $num = 10;
?>

これはJSコードです:

function isLarge(number)
{
    var s = document.getElementById("test").value;
    if (s > number)
    {
        window.alert("to large");
        return false;
    }
     return true;
}

これは私の他のPHPです:

<input type="text" id=""test>
<input type="button" value="click" onclick="isLarge('<?php print $num?>')">

これを実行すると、結果が正しくありません。print $numは、数値と比較されない数値の文字列を私に与えていると思いました。

4

5 に答える 5

3

PHP は の文字列表現を提供していますが10、これも10です。ただし、JS コードはこれを引用符で囲み、JS文字列値にします。入力要素の.valueプロパティも文字列であるため、JS は 2 つの「数値」を文字列として比較し、予期しない結果をもたらす可能性があります。

JavaScript で次のことを考慮してください。

2 > 10       ===> false (numeric comparison)
"2" > 10     ===> false ("2" converted to number)
2 > "10"     ===> false ("10" converted to number)
"2" > "10"   ===> true (string comparison!)

数値を比較する場合は、比較する 2 つのオペランドのうち少なくとも 1 つが数値である必要があります。

.valueを数値に変換するには、次を使用しparseIntます。

var s = parseInt(document.getElementById("test").value, 10);

PHP 変数を数値に変換するには、PHP エコーを囲む引用符を削除するだけです。

onclick="isLarge(<?php print $num?>)"

ただし、 が$num数値でない場合、解析エラーが発生する可能性があります。防弾ソリューションを使用する方がはるかに良いでしょう:の値がJSランドに安全に移行json_encodeすることを確認してから、それを数値にします:$numparseInt

onclick="isLarge(parseInt(<?php print json_encode($num);?>, 10))"

上記の手法では、最悪のシナリオは、$numがガベージの場合に を呼び出すことになりisLarge(0)ます。

于 2013-05-29T13:49:17.933 に答える
1

PHP ではエラーは表示されませんが、HTML では二重引用符が表示されます。

<input type="text" id=""test>
于 2013-05-29T13:47:14.837 に答える
1

print $num は、数値と比較されない文字列値の数値を私に与えていると思いました。

PHP は緩やかに型付けされた言語です。つまり、異なるタイプの値をクロス比較できます。正しい型が渡されていることを確認したい場合は===、JS コードで演算子を使用する必要があります。

Echo は値を として出力しますString。その値を数値として解釈するのはあなた次第です。出力を一重引用符で囲んで、JS にこの値をstring.

于 2013-05-29T13:47:18.913 に答える
1

PHPとは関係ありません

onclick="isLarge('<?php print $num?>')

値を Javascript 関数に文字列として渡しています。一重引用符に注意してください'

数値として比較したい場合は、'

于 2013-05-29T13:48:16.323 に答える
1
onclick="isLarge('<?php print $num?>')"

この結果は次のとおりです。

onclick="isLarge('10')"

'10' in Javascriptは文字列です。これは、 Javascriptで引用符で囲んだためです。

PHPの出力は特定のタイプでは無効ですが、基本的にはすべての意図と目的のために文字列です。実際に依存しているのは、この出力を読んでいる次のエンティティがそれをどのように解釈しているかです。

于 2013-05-29T13:49:06.457 に答える