想到先前有朋友問說:明明看抓出來的資料都一樣,也沒輸入錯誤,為什麼客戶會反應搜尋輸入時會找不到那筆資料呢?
我想了想,問他說:你在變數那有沒有加上trim()的函數?
假如沒有的話,有沒有可能是輸入時,前面或後面多了個空白呢?
之後,用了strlen()計算字數再跟經過trim後的字數做比對
果真,抓出了幾筆跟我說的狀況一樣的資料,也難怪搜尋時會找不到
strlen:計算的字串的長度
使用方法:strlen($string)
$string:為您要計算長度的字串資料
(參考資料:http://php.net/manual/en/function.strlen.php)
trim:清除字串前後的空白
使用方法:trim($string)
$string:為您要清除前後空白的字串資料
(參考資料:http://php.net/manual/en/function.trim.php)
以下模擬一個先前情況的範例,資料庫與程式碼如下:
資料庫:ithome_test
資料表:member_account
欄位 型別 Other
id int(5) PK、AI
username varchar(50)
(自行新增5~10筆資料,內含有前後空白的問題字串資料)
「strlen.php」
<?php
/* Connecting, selecting database */
$db_link = mysql_connect("127.0.0.1", "root", "");
if (!$db_link) {
die("Could not connect: " . mysql_error());
}
mysql_select_db("ithome_test") or die("Could not select database");
/* Performing SQL query */
$sql="SELECT `username` FROM `member_account`";
$result=mysql_query($sql);
echo "<table>";
while($row=mysql_fetch_array($result)){
$username=$row['username'];
if(strlen($username)!=strlen(trim($username))){
echo "<tr>";
echo "<td>前後有加入空白的問題字串:".$username."</td>";
echo "<td>原來字數:".strlen($username)."</td>";
echo "<td>去除前後空白字數:".strlen(trim($username))."</td>";
echo "</tr>";
}
}
?>
輸出畫面如下:
而通常strlen常與mb_strlen來比較討論,而兩者有什麼差別嗎?
mb_strlen:計算字串的長度
使用方法:mb_strlen($string,$encoding)
$string:為您要計算長度的字串資料
$encoding:字串編碼,如果省略,則使用內部字串編碼
(參考資料:http://php.net/manual/en/function.mb-strlen.php)
兩個都是計算字串的長度,但差別是在strlen是計算字串字元的長度,而mb_strlen才是計算字串的長度
但是,英文與符號是看不出來的,假如是有中文字的話就有所不同了
Try一下就知道差別在哪,範例程式碼如下(mb_strlen字串編碼使用utf-8):
「mb_strlen.php」
<?php
$str="iThome鐵人賽,真棒!";
echo "本文:".$str."<br />";
echo "strlen字數:".strlen($str)."<br />";
echo "mb_strlen字數:".mb_strlen($str,'utf-8');
?>
輸出畫面如下: