当我运行下面的代码时,我得到的是?
,而不是第一个字符Ş
。
如果我不使用任何土耳其语字符,我没有任何问题,但当我使用这个字符Ş,İ,Ö,Ç
时,我会遇到问题。
$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 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>';
}
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>';
}