php获取每个字符的字符串


php get string each character

当我运行下面的代码时,我得到的是?,而不是第一个字符Ş

如果我不使用任何土耳其语字符,我没有任何问题,但当我使用这个字符Ş,İ,Ö,Ç时,我会遇到问题。

$str = "Şef";
echo $str[0];

$str="Şef"; 
for($i = 0; $i < strlen($str); $i++) 
    echo  $str[$i] . '<br>';

如何解决这个问题?头字符集和HTML字符集是utf-8,我的文本编辑器字符集也是utf-8。

我建议您使用Multibyte String Functionshttp://docs.php.net/manual/en/ref.mbstring.php

mb_internal_encoding("UTF-8");
$str="Şef"; 
$len = mb_strlen($str);
for($i = 0; $i < $len; $i++) {
    echo  mb_substr($str, $i, 1) . '<br>';
}

strlen()函数和[]语法以字节分辨率工作。像Ş这样的字符用UTF-8编码在多个字节(2到4)中。你必须使用utf-8兼容的函数。PHP有3个处理unicode的扩展。

ext/intl

最现代和建议的扩展:

$str = "Şef"; 
$length = grapheme_strlen($str);
for ($i = 0; $i < $length; $i++) {
  echo  grapheme_substr($str, $i, 1).'<br>';
}

ext/iconv

标准扩展(自PHP 5.0afaik以来)演示

$str = "Şef"; 
$length = iconv_strlen($str, 'utf-8');
for ($i = 0; $i < $length; $i++) {
  echo  iconv_substr($str, $i, 1, 'utf-8').'<br>';
}

ext/mbstring

通常安装扩展,功能比ext/iconv多。

$str = "Şef"; 
$length = mbstring_strlen($str, 'utf-8');
for ($i = 0; $i < $length; $i++) {
  echo  mbstring_substr($str, $i, 1, 'utf-8').'<br>';
}