このスタンドアロンコードが機能しないのはなぜですか。
$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 />';
}
}
Httpsが$link
変数に含まれている場合でも、毎回許容される印刷です。
疑わしいときは the docs を読んでください:
[strpos] haystack文字列で最初に見つかったneedleの数値位置を返します。
だからあなたはもっともっと何かを試してみたい:
// ...
if (strpos($link, $unacceptable) !== false) {
それ以外の場合、strpos
は数値を返し、ブール値true
を探しているためです。
strpos() は、一致を検出してもtrueを返さず、最初に一致した文字列の位置を返します。注意:一致が文字列の先頭である場合、===演算子を使用しない限りfalseと比較されるゼロのインデックスを返します。
あなたの失敗状態は間違っています。
一致が見つからない場合、strposはfalseを返すため、明示的に確認する必要があります。
if (strpos($link, $unacceptable) !== false) {
Strposは常に文字列( 'https://google.com';)で「httpsL」を検索するように位置を返し、次に0番目の位置を返し、PHPはfalseと評価します。
このリンクを参照してください:(あなたにとって非常に便利であることを願ってください): http://php.net/manual/en/function.strpos.php
strpos
関数はブールFALSEを返す場合がありますが、FALSEと評価される非ブール値を返す場合もあります。
だから私はこのようにしました
if (strpos($link, $unacceptable) !== false) {
//Code
}