28

このスタンドアロン コードが機能しない理由:

$link = 'https://google.com';
$unacceptables = array('https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png');

foreach ($unacceptables as $unacceptable) {
        if (strpos($link, $unacceptable) === true) {
            echo 'Unacceptable Found<br />';
        } else {
            echo 'Acceptable!<br />';
        }
}

$link変数内にhttpsが含まれていても、毎回印刷可能です。

4

5 に答える 5

73

疑問がある場合は、ドキュメントをお読みください:

[strpos] haystack 文字列で最初に見つかった針の位置を数値で返します。

したがって、次のようなものを試してみたいと思います:

// ...
if (strpos($link, $unacceptable) !== false) {

それ以外の場合strposは数値を返し、 boolean を探しているためですtrue

于 2011-02-01T04:40:15.797 に答える
13

strpos()は、一致が見つかったときに true を返すのではなく、最初に一致した文字列の位置を返します。注意してください。一致が文字列の先頭である場合、=== 演算子を使用しない限り、false と比較されるゼロのインデックスが返されます。

于 2011-02-01T04:40:43.443 に答える
6

あなたの失敗条件は間違っています。

一致が見つからない場合、strpos は false を返すため、明示的に確認する必要があります

if (strpos($link, $unacceptable) !== false) {
于 2011-02-01T04:44:05.407 に答える
1

Strpos は、文字列 ('https://google.com';) で「httpsL」を検索するように常に位置を返します。次に、0 番目の位置を返し、PHP はそれを false と評価します。

このリンクを参照してください:(あなたにとって非常に役立つことを願っています): http://php.net/manual/en/function.strpos.php

于 2011-02-01T04:47:40.387 に答える