簡體   English   中英

for循環中的strlen和非拉丁字符

[英]strlen and non latin characters in for loop

我有一個HTML表單,使用post發送索索索到我的PHP文件。

我嘗試了strlen,但它給了我24而不是3(?!)......然后這打破了我的for循環:

$in=$_POST['inn'];
$length=strlen($in)
for ($i=0; $i<$length; $i++) {
$cleanchar=$in[$i];
}

我希望cleanchar作為一個單獨的角色,就好像只有一個角色通過POST發送一樣。

如何使用PHP分隔每個字符?

嘗試使用mb_strlen進行多字節字符操作:

echo mb_strlen('索索索', 'utf-8'); // or omit second parameter or change to your encoding

來自文檔:

返回具有字符編碼編碼的字符串str中的字符數。 多字節字符計為1。

http://php.net/manual/en/function.mb-strlen.php

你的表格不發送三個字符,它發送三個序列〹(其中12345是這些符號的字符代碼 - 我不知道它實際是什么)。

這是八個字符,乘以三個符號,字符串長度為24。

如果你要運行echo htmlspecialchars($_POST['inn']); 你可以清楚地看到這種效果。

我很確定有辦法解決這個問題......我認為你需要確保文檔字符集是UTF-8: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />你的<head>部分的<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

即便如此,根據這些符號的字節長度,您將獲得69的長度,因為這是strlen測量的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM