我从数据库中获取一个字符串,用utf8_unicode_ci
编码。它可能包含中间点字符(⋅),我必须找出使用strcmp
。如果我直接在HTML中显示字符串,则显示字符没有问题,但是当我进行比较时,结果不是我所期望的。
例如:
$string = "⋅⋅⋅ This string starts with middle dots";
$result = strcmp(substr($string , 0, 2), "⋅⋅");
结果不是0,我认为应该如此。 PHP文件以UTF-8编码保存。我在这里错过了什么?即使我从变量而不是数据库中取出字符串
,也会发生这种情况答案 0 :(得分:2)
使用strpos
- http://uk1.php.net/manual/en/function.strpos.php
返回第一次出现的指定字符的int值。 E.g:
$myStr = '.. this is a string';
$find = '..';
$pos = strpos($myStr, $find);
var_dump($pos); //will output 0;
如果找不到 - 它返回false。
答案 1 :(得分:2)
PHP的substr不会将unicode字符作为单个字符。
dot you're using实际上是3个字符0xE2 0x8B 0x85
。
所以要么使用mb_substr,要么使用不同的偏移量:
<?php
$string = "⋅⋅⋅ This string starts with middle dots";
$result = strcmp(mb_substr($string , 0, 2), "⋅⋅");
var_dump($result);
或者如果mb_ *函数不存在:
<?php
$string = "⋅⋅⋅ This string starts with middle dots";
$result = strcmp(substr($string , 0, 6), "⋅⋅");
var_dump($result);