假设我有两个字符串
$string1 = "Hello my name is Steve and this is spam";
$string2 = "Hello my name is Steven and this comment is spam";
这两根绳子很像。
有没有一种方法可以比较这些,比如php中的if ($string1 like $string2)
?
您可以使用Levenstein算法计算相似性指数。它计算需要更改的字符数,以便将第一个输入转换为第二个输入,或者反过来:
levenshtein("bar", "baz"); // 1 character difference
levenshtein("bar", "foo"); // 3 character difference
$string1 = "Hello my name is Steve and this is spam";
$string2 = "Hello my name is Steven and this comment is spam";
levenshtein($string1, $string2); // 9 character difference
@TimCooper还提出了similar_text()
,它以类似的方式工作。
然后对字符串进行散列并比较散列。我认为这比任何字符串比较函数都快。
原因。字符串比较函数逐字节比较每个字符。散列函数一次获取整组字符并生成其散列。
当然,您应该使用像md5这样的"简单"散列函数。而不是专门用于安全哈希的hash_pbkdf。这意味着pbkdf计算哈希的速度非常慢,所以atacker不能在给定的时间生成这么多哈希。但这偏离了主题;-)
或者:实施此https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm甚至更好(更快)https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm