字符串不能以Å;开头ÄÖ;


String cannot start with Å, Ä, Ö

当我缩短字符串时,为什么会这样。字母"å,ä,ö"变成了"?"
如果我用"Örjan"这个名字,它就变成了"Orjan"
但当我使用"比约恩"时,一切都好吗

PHP

//Create initials
$usr_fname_f_letter = $_POST['usr_fname'];
$usr_fname_f_letter = $usr_fname_f_letter[0];
$usr_lname_f_letter = $_POST['usr_lname'];
$usr_lname_f_letter = $usr_lname_f_letter[0];
$usr_inits = $usr_fname_f_letter .= $usr_lname_f_letter;
echo $_POST['usr_fname'];
echo '<br>';
echo $_POST['usr_lname'];
echo '<br>';
echo $usr_fname_f_letter;
echo '<br>';
echo $usr_lname_f_letter;
echo '<br>';
echo $usr_inits;
echo '<br>';

结果

Örjan
比约恩松
�B
B
�B

$usr_fname_f_letter = $usr_fname_f_letter[0];

简单地从CCD_ 1取第一个(零偏移)字节;但是您使用的是多字节字符集,这就像将一个字符的一部分切成两半。

使用

mb_substr($usr_fname_f_letter, 0, 1, 'UTF-8')

因为mb*函数是多字节字符集感知的;并以字符为单位工作,而不是以字节为单位

我假设您的编码是utf-8,并且您可能只打印多字节字符的一部分。尝试使用多字节安全功能,如mb_substr:

mb_substr($str, 0, 1, "UTF-8");