我正在創建一個簡單的注冊表單,您必須在其中將您的昵稱輸入到 textarea。當用戶使用波蘭語字符(?、?、? 等)時會出現問題。當我嘗試通過 echo 顯示整個字串時,它看起來應該是這樣的,但是當我嘗試只顯示一個字符時,它會顯示這個奇怪的 ? 符號。
function ech($nam)
{
echo $nam;
echo "</br>";
echo $nam[1];
}
$te = $_POST['sth']; //$te equals "???" now
ech($te);
輸出:
???
?
uj5u.com熱心網友回復:
對字串的字符使用偏移量$nam[1]實際上只回傳一個位元組,但字符是多個位元組。使用多位元組安全的字串函式,如mb_substr($nam, 0, 1)
- php 字串是位元組陣列(與 JavaScript 相比,它們是 utf16 字符陣列),在 UTF-8 中,字串 "?" 包含 2 個位元組,執行 strlen("?") 會得到 2,執行 bin2hex( "?") 給你 "c59b",當你做 $str[0] 時,你只獲取組成 ? 的 2 個位元組中的第一個位元組,這本身恰好沒有任何意義,因此你得到? 做 $str[0] (fwiw 做 echo $str[0].$str[1] 也可以,因為 ? 恰好是 2 個位元組,你會手動獲取前 2 個位元組)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/492746.html
標籤:php UTF-8 iso-8859-1
上一篇:用戶名一直被驗證為名稱
