比较字符串与中间点在PHP中不起作用

时间:2017-07-25 11:39:18

标签: php special-characters strcmp

我从数据库中获取一个字符串,用utf8_unicode_ci编码。它可能包含中间点字符(⋅),我必须找出使用strcmp。如果我直接在HTML中显示字符串,则显示字符没有问题,但是当我进行比较时,结果不是我所期望的。

例如:

$string = "⋅⋅⋅ This string starts with middle dots";
$result = strcmp(substr($string , 0, 2), "⋅⋅");

结果不是0,我认为应该如此。 PHP文件以UTF-8编码保存。我在这里错过了什么?即使我从变量而不是数据库中取出字符串

,也会发生这种情况

2 个答案:

答案 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);