php获取字符串每个字符

时间:2013-11-22 13:13:43

标签: php arrays character-encoding

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

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

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

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

如何解决这个问题?标题字符集和HTML字符集是utf-8,我的texteditor charset也是utf-8。

2 个答案:

答案 0 :(得分:1)

我建议您使用Multibyte String Functions http://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>';
}

答案 1 :(得分:1)

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

转/国际

最现代化和建议的扩展名:

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

转/的iconv

标准扩展(自PHP 5.0起 afaik Demo

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

转/ 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>';
}