当我运行以下代码时,我得到?
而不是第一个字符Ş
。
如果我不使用任何土耳其语字符,我没有任何问题,但是当我使用Ş,İ,Ö,Ç
这个字符时,我遇到了问题。
$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。
答案 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>';
}
标准扩展(自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>';
}
经常安装扩展,更多功能然后是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>';
}