使用PHP,我試圖確定在字符串諸如這些的長度(字符數):PHP的strlen()也不mb_strlen()返回意外的結果
1
1.1
1.1.1
1.1.2
1.1.3
1.1.3.1
1.1.3.2
1.1.4
1.1.5
1.1.6
1.1.7
等
當這些字符串的長度與mb_strlen()或strlen的(),結果測得
------------------------------
value | mb_strlen() | strlen()
------------------------------
1 | 1 | 1
------------------------------
1.1 | 5 | 5
------------------------------
1.1.1 | 9 | 9
------------------------------
1.1.1.1 | 13 | 13
------------------------------
1.1.1.2 | 13 | 13
------------------------------
1.1.1.3 | 13 | 13
------------------------------
看來,它的計數「」作爲3個字符?我想知道做一個小功能來彌補可預測的「錯誤」,但是我想知道爲什麼它要計算「」。作爲3個字符開頭。
mb_language('uni');
mb_internal_encoding('UTF-8');
$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');
是什麼讓:
我已經經歷了好幾個地方,包括this SO article和read the article mentioned,將建議轉換到頁面已經看了?
編輯: 字符串作爲csv導入的一部分導入。
這裏是代碼:
<?
$f = fopen("s2db.csv", "r");
while (($line = fgetcsv($f)) !== false) {
$colcount = 0;
foreach ($line as $cell) {
//lets get the lines into variables first
//there only five, so just count
switch ($colcount) {
case '0':
$item = $cell;
break;
case '1':
$itemtitle = htmlspecialchars($cell);
break;
case '2':
$itemsubject = htmlspecialchars($cell);
break;
case '3':
$itemnumber = htmlspecialchars($cell);
break;
case '4':
$itemqty = htmlspecialchars($cell);
break;
case '5':
$itemfilename = htmlspecialchars($cell);
break;
}
$colcount++;
}
$itemlen = strlen($item);
echo "Value = " . $item . " | strlen() Length = " . $itemlen . "| mb_strlen() = " . mb_strlen($item) . "</br>";
}
?>
這裏有結果
Value = 1 | strlen() Length = 3| mb_strlen() = 3
Value = 1.1 | strlen() Length = 7| mb_strlen() = 7
Value = 1.1.1 | strlen() Length = 11| mb_strlen() = 11
Value = 1.1.1.1 | strlen() Length = 15| mb_strlen() = 15
Value = 1.1.1.2 | strlen() Length = 15| mb_strlen() = 15
Value = 1.1.1.3 | strlen() Length = 15| mb_strlen() = 15
Value = 1.1.1.3.1 | strlen() Length = 19| mb_strlen() = 19
Value = 1.1.1.3.2 | strlen() Length = 19| mb_strlen() = 19
Value = 1.1.1.3.3 | strlen() Length = 19| mb_strlen() = 19
Value = 1.1.1.4 | strlen() Length = 15| mb_strlen() = 15
SOLUTION:
我給@因爲他hexdump都可以幫我確定我是不是hek2mgl投票瘋狂,它真的在數「。」作爲3,as shown here。
什麼我可以做一下導入格式,所以我只是要添加代碼來補償:
感謝大家的幫助!
什麼字符代碼,你點了? 'php -r'echo ord(「。」)的輸出是什麼?' –
你所建議的代碼不是很有效 - 你沒有引用字符串,所以它們被作爲數字處理,並且所以他們無效。值得一提的是...... –
要清楚的是,你的代碼的*輸出是'strlen(1.1.1.3.3)',但它實際上調用了那些帶有* string *參數的函數? – delnan