2017-07-25 85 views
1

我從數據庫中得到一個字符串,它使用utf8_unicode_ci進行編碼。它可能包含中間點字符(⋅),我必須找出使用strcmp。如果我直接在HTML中顯示字符串,則字符顯示沒有問題,但是當我進行比較時,結果不是我所期望的。比較字符串與中間點不能在PHP中工作

例如:

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

結果不爲0,因爲我認爲應該是。 PHP文件以UTF-8編碼保存。我在這裏錯過了什麼?出現這種情況,即使我把字符串從一個變量,而不是數據庫

+2

您可能需要使用多字節功能。 –

回答

1

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