PHP strlen() & mb_strlen() 直接與加入編碼之判斷字串長度函數

2019/06/28 1,878 2 網站技術 , PHP

在開始寫 PHP 時為了限制 HTML 表單輸入的字數,就用了 strlen() 來判斷字數,結果後來才發現判斷出來的並不是真正的字數,而是該字串的 Bytes(位元組),一般來說英文和數字一個就是 1 Byte,中文一個字是 3 Bytes,表情符號(Emoji)一個是 4 Bytes,所以比較不能來限制我們一般認知的字數,而且存入 MySQL 資料庫時,若欄位有設定字符長度限制,例如:Varchar (n) 和 Char(n),n 指的都是字符長度,並不是 Bytes,因此我們應該在這樣的應用中改用另一個函數,也就是 mb_strlen(),他可以加入編碼再來判斷字串長度,一般來說用的會是 utf-8。

strlen(string) // string 必需,用來計算該字串 Bytes(位元組)
mb_strlen(string, "string encoding") // string 必需,用來計算該字串字數;string encoding 必需,填入字串編碼

這邊我們就簡單寫個範例:

由這張圖可以看到,首先設定三個字串,分別用 strlen() & mb_strlen() 來判斷字串長度,有中文字(或者可以說全形字)出現時誤差就會非常大,所以一般來說偵測字串長度都建議用 mb_strlen() 加上 utf-8 編碼,這樣比較符合我們定義中的字串長度(字數),還有如果是用來判斷帳號、密碼的長度就直接用 strlen() 就 OK 了!

⌨ 完整程式碼提供:

<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>strlen() & mb_strlen() 直接與加入編碼之判斷字串長度函數</title>
</head>
<body>
<?php

// 設定字串
$a = "Mnya.tw";
$b = "萌芽網頁超讚!";
$c = "萌芽 Mnya";
echo "a:" . $a . "<br>";
echo "b:" . $b . "<br>";
echo "c:" . $c . "<br>";

// strlen()

echo "<br>◆ strlen() 直接判斷字串長度:<br>";

echo "a:" . strlen($a) . "<br>";
echo "b:" . strlen($b) . "<br>";
echo "c:" . strlen($c) . "<br>";

// mb_strlen()

echo "<br>◆ mb_strlen() 加入 utf-8 編碼判斷字串長度:<br>";

echo "a:" . mb_strlen($a, "utf-8") . "<br>";
echo "b:" . mb_strlen($b, "utf-8") . "<br>";
echo "c:" . mb_strlen($c, "utf-8") . "<br>";

?>
</body>
</html>
贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇