3

フォームで簡単な重複チェックを行っています。2つの文字列を比較するとき、私は次のようなことを試みていました:

if (stripos($_SESSION['website'], $f['website']))

このエラーが発生しています:

Fatal error: Call to undefined function: stripos() in...

完全に一致させたくありません。基本的に、www.google.com の場合、 www.goog.com の場合は返し$_SESSION['website']たいと思います。stripostrue$f['website]

私は何か間違ったことをしていますか、それともこれを行うためのより良い方法はありますか?

編集:私はいくつかのテストを行っていましたが、$_SESSION['website']変数にwwwandが含まれているかどうかに気付きました.com. 私の$f['website]変数もそうです。strposそれを真として返すべきではありませんか?

4

2 に答える 2

5

stripos()、マニュアルによると、PHP 5以降のコアにのみ存在します。stripos が存在しない場合は、非常に古い PHP 4 を使用していることを示しています。アップグレードすることをお勧めします。なんらかの非常識な理由で本当にできない場合は、strpos を呼び出す前に 2 つの文字列を常に小文字にすることができます。これにより、同じ効果が得られます。

<?php
// PHP 5.
$pos = stripos( 'www.google.com', 'google.com' );

// PHP 4.
$pos = strpos( strtolower( 'www.google.com' ), strtolower( 'google.com' ) );

とは言っても、コードにはさらに何かがあります。文字列が stringで始まるif( stripos( $foo, $bar ) )場合、どれが 0 を返すかをチェックしています。代わりにチェックする必要があります。$foo$barif( stripos( $foo, $bar ) !== false )

別のメモ: ストリップが役立つとは思いません。あなたが言及www.google.comした とwww.goog.comは、2 つのまったく異なるものです。後者は前者の部分文字列ではなく、stripos は部分文字列の開始位置をチェックします。「緩やかな比較」は行いません。

「いいね」が必要で、配列に用語がある場合は、similar_text()関数をチェックしてみてください。これにより、2 つの異なる文字列がどの程度類似しているかがわかります。例として:

<?php
$similarity = 0;
similar_text( 'www.goog.com', 'www.google.com', $similarity );
var_dump( $similarity );

上記のコードは に設定さ$similarityれますfloat(92.307692307692)。これは、2 つの文字列の類似度をパーセンテージで表したものです。当然、類似性のしきい値は自分で決めることができます。

于 2012-04-11T13:52:13.403 に答える
-2

その a strpos('Your String Or Websitename','The Term Search');

一致が見つかった場合は true を返し、それ以外の場合は false を返します

$a=strpos($_SESSION['website'], $f['website'])

if($a==TRUE) {

    //do stuff

} そうしないと {

    //other stuff
}
于 2012-04-11T13:53:07.240 に答える