楼主: peyzf
3965 11

[数据管理求助] strpos(s1,s2)识别中文字符容易出错? [推广有奖]

11
glorenia 发表于 2022-7-17 11:10:18
我也发现,对同一笔数据,多次执行strpos()、ustrpos()、strmach()这类命令,每次匹配出的结果个数不一致,虽然个数差异在10以内,但也一定程度上导致了结果不可复制,不知道有无高人有解决方案。

12
赵安豆 发表于 2025-6-3 19:59:04
`strpos()` 函数在处理包含中文字符的字符串时确实可能出现问题,主要原因是 PHP 的 `strpos()` 默认是基于字节进行比较的,而不是基于字符。对于中文等多字节编码的字符(如 UTF-8 编码),这可能会导致错误的结果。

例如,在UTF-8编码下,“某”这个汉字由多个字节组成。如果用 `strpos()` 去查找“某”,它会尝试在字符串中找到与“某”的第一个字节完全匹配的位置,而不是整个字符的匹配位置。因此,即使某个企业名中没有完整的“某”字,也可能会返回一个错误的结果。

为了解决这个问题,可以使用 PHP 提供的多字节函数 `mb_strpos()` 来代替 `strpos()`。`mb_strpos()` 函数会根据指定的编码来正确处理字符串中的多字节字符:

```php
$entity = "这是一个示例企业名";
$searchString = "某";

$temp = mb_strpos($entity, $searchString);
```

这样,你就可以准确地判断 `$entity` 是否包含 “某” 这个汉字了。记得在使用 `mb_strpos()` 之前确保已经安装并启用了多字节字符串扩展(MBSTRING)。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-18 21:42