如何在PHP中使用strpos来匹配外语字符?

时间:2012-03-15 01:02:17

标签: php strpos

根据我说西班牙语的消息来源,如果我在包含这两个值的字符串列表中搜索“pan”模式:

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

它应该匹配它们 - 例如strpos("pan", $normalString)strpos("pan", $specialString)都应返回'3'。

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

如果我在mySQL中进行类似搜索“like”%pan%“它会匹配两个字符串。

据推测,这种情况不仅适用于n-tilde,也适用于使用重音等修饰的其他字符。

我很困惑如何处理这个...这似乎是其他人必须遇到并解决的问题,但我还没有找到一个好的现有解决方案。我希望在PHP中有一些不同的功能,或某种配置,但没有快乐。

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

对我有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

strpos比较字符,“n”根本不是“ñ”。实际上它只是比较 bytes ,它甚至不会意识到不同的编码。如果您想要区域设置和整理比较,请使用strcoll。阅读评论,没有太多关于它的文档。

数据库包含一个开箱即用的整理设置,这使得它可以进行模糊搜索。

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