Warning: file_put_contents(/datas/wwwroot/jiajiahui/core/caches/caches_template/2/default/show.php): failed to open stream: Permission denied in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 55

Warning: chmod(): Operation not permitted in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 56
mysql LIKE和正则表达式VS RLIKE和变音符号 - 源码之家

mysql LIKE和正则表达式VS RLIKE和变音符号

问题描述:

我需要实现一个小搜索引擎。问题是,数据库内部的数据使用的是字母而不是字母,例如字母和数字。我需要找到他们的可能性。我可以用我的正则表达式生成器功能很容易做到这一点:mysql LIKE和正则表达式VS RLIKE和变音符号

function shittyumlauts($string){ 
    $string = mb_strtolower($string); 
    $string = preg_replace('/(Ä|ä|ae)/i', '(ä|ae)', $string); 
    $string = preg_replace('/(Ö|ö|oe)/i', '(ö|oe)', $string); 
    $string = preg_replace('/(Ü|ü|ue)/i', '(ü|ue)', $string); 
    return $string; 
} 

我把它放在查询与> RLIKE $字符串<。到现在为止还挺好。

但是在数据库中也有“Renés”。当我使用RLIKE时,我无法通过输入“Rene”找到它们。另一方面,如果我使用> LIKE $字符串<,它会在输入“Rene”时找到“René”,但在那里不能使用正则表达式。

我搜索了几个小时,现在我也发现了几个类似的主题。但迄今为止还没有真正的解决方案。

我认为我可以选择字段并像REPLACE(field,[^ a-z],'_')(无效代码)一样对其应用REGEX REPLACE并使用LIKE。

有没有人有线索?

+1

有趣的方法名称。 –

+0

很高兴你喜欢它3 :) – Bernhard

+0

你的mysql版本是什么? –

好的,我自己找到了答案。这可能不是最佳实践。但我工作正常。所以,如果你有一对夫妇的字符可能被写,否则像是在德国“ö”我的情况下,“大江”,你可以建立这样的查询:

... WHERE REPLACE(LOWER(c_name), 'ö', 'oe') COLLATE utf8_general_ci 
    LIKE '".mysqli_real_escape_string($link, $search)."' ... 

这时就会发现不仅“möglich”通过搜索“刘若英”(反之亦然),键入“moeglich”(反之亦然),也有“勒”

另外你在搜索查询变换角色太:

$string = str_replace(array('ä', 'ö', 'ü', 'ß'), 
         array('ae', 'oe', 'ue', 'ss'), 
         mb_strtolower($string)); 

多数民众赞成它。我希望这可以帮助某人:)