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

Php 字符串不能以Å;开头ÄÖ;,php,Php,为什么,当我缩短一根绳子。字母“å,ä,ö”变成“?”? 如果我使用“Ö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_

为什么,当我缩短一根绳子。字母“å,ä,ö”变成“?”?
如果我使用“Ö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>';
//创建首字母
$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$_POST['usr_lname']; 回声“
”; 回音$usr\u fname\u字母; 回声“
”; 回音$usr_lname_f_字母; 回声“
”; echo$usr_inits; 回声“
”;
结果

Örjan
比约尔松
�B
B

�B

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

只需从
$usr\u fname\u f_letter
中获取第一个(零偏移量)字节;但是您使用的是一个多字节字符集,这就像将一个字符的一部分切成两半

使用


因为mb_*函数支持多字节字符集;并且以字符而不是字节工作

我知道� 大多数情况下,符号表示UTF-8有问题
mb_substr($str, 0, 1, "UTF-8");
$usr_fname_f_letter = $usr_fname_f_letter[0];
mb_substr($usr_fname_f_letter, 0, 1, 'UTF-8')