2012-03-15 20 views
2

据我的消息来源谁讲西班牙语,如果我寻找包含这两个值中的字符串列表模式“锅”:如何获得PHP中的strpos以匹配外语字符?

$normalString = "abcpan123"; 
$specialString = "abcpañ123"; 

它应该与他们两个 - 例如strpos("pan", $normalString)strpos("pan", $specialString)都应返回'3'。

但是,只有第一个返回非假值。

如果我做MySQL中的类似搜索“,如‘%泛%’这两个字符串匹配。

想必这种情况不仅适用于正波浪线,但与口音等改性其他字符好吧

我对如何处理这个问题感到困惑...似乎是别人必须遇到和解决的问题,但我还没有找到一个好的现有解决方案。 PHP或某种配置,但没有喜悦

当然,我可以用正则表达式编写一些自定义代码代替使用strpos(),但 我甚至不知道如何确定多种外语中哪些字符将被视为等效。

对我有帮助吗?

回答

0

strpos比较字符,“n”不是“ñ”。实际上它只是比较字节,它甚至不会意识到不同的编码。如果你想知道比较的语言环境和整理,请使用strcoll。阅读评论,没有那么多关于它的文档。

该数据库包括一个排序规则设置框,这使得它执行这样的模糊搜索。

另一种方法是将所有字符串归一化为纯ASCII字符,然后再使用iconv('UTF-8', 'ASCII//TRANSLIT', $string)进行比较。

+0

iconv()调用在php命令行脚本中非常适合我,但在我通过apache运行php时看起来没有做正确的事情。任何想法为什么? – tristan 2012-03-15 20:51:50

相关问题