- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
使用 PHP,我试图确定如下字符串的长度(字符数):
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 个字符开头。
我已经浏览了几个地方,包括 this SO article和 read the article mentioned,将建议的转化添加到页面:
mb_language('uni');
mb_internal_encoding('UTF-8');
$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');
什么给了?
编辑:字符串作为 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
解决方案:
我给了 @hek2mgl 投票,因为他的 hexdump 帮助我确定我没有疯,它确实在计算“。”作为 3,as shown here .
对于导入格式我无能为力,所以我将添加代码来补偿:
感谢大家的帮助!
最佳答案
我得到了:
<?php
$str = '1.1.1';
var_dump(mb_strlen($str, 'utf-8')); // 5
var_dump(strlen($str)); // 5
如预期。似乎 .
在您的情况下不是常规点,而是特殊的 unicode 字符。请显示您输入数据的 hexdump。您可以使用 Hexdump (我为这种情况编写了包):
安装:
sudo pear channel-discover www.metashock.de/pear
sudo pear install metashock/Hexdump
用法:
<?php
require_once 'Hexdump.php';
hexdump('1.1.1');
看看幕后的真实人物是什么会很有趣。
关于PHP strlen() 或 mb_strlen() 返回意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20098641/
在 PHP 中计算 UTF-8 字符串的长度时,我使用 mb_strlen()。 例如: if (mb_strlen($name, 'UTF-8') < 3) { $error .= 'Nam
我如何知道 $_REQUEST 中的字符集?以及如何设置 $_REQUEST 的字符集? 最佳答案 简而言之:您并不真正了解通过 GET 或 POST 传递给 PHP 脚本的变量所使用的编码(字符集)
我使用 document.getElementById("text").value.length 通过 javascript 获取字符串长度,以及 mb_strlen($_POST['text'])通
当我在字符串上运行 PHP 函数 strlen() 和 mb_strlen() 时,它们都返回了错误的字符数。 这是我正在使用的一段代码... $foo = mb_strlen($itemDetai
有一些遗留代码,我应该将其从 iso-8859-2 转换为 UTF-8。其中一个问题是 strlen 函数的广泛使用。我首先想到的是将所有出现的 strlen 替换为 mb_strlen。 但是,我的
使用 PHP,我试图确定如下字符串的长度(字符数): 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_s
你知道如何在JS中像PHP中的mb_strlen函数一样检查字符长度吗?我刚刚知道使用这种方式,它计算的是字节而不是字符。非常感谢! $(".textarea").val().length 最佳答案
我使用document.getElementById("text").value.length通过javascript获取字符串长度,以及mb_strlen($_POST['text'])通过PHP获
我正在尝试删除字符串的第一个和最后一个字符。我正在经历奇怪的事情。 一探究竟: $string = 'This is a test.'; $string = mb_substr($string, 1,
我正在尝试使用 Totorialzine 的源代码创建一个捐赠中心。 到目前为止,我现在一切正常,但唯一的问题是我一直在努力解决并试图查看一整天,并且无法弄清楚代码到底出了什么问题 这是我在访问者捐款
我有这个自定义编译的 PHP (v5.3.3),启用了以下扩展(通过配置): ./configure --prefix=/usr/local/php5.3.3 --with-config-file-p
我正在使用 JavaScript 和 PHP 来计算字符串长度。一切正常,除了当我计算来自 Chrome 或 Firefox 与 Internet Explorer 的文本区域字符串长度时。新的文本区
我安装的 Yii 直到今天都运行良好。我今天在我的机器上安装了更新,之后所有页面都抛出了这个错误: PHP Fatal Error – yii\base\ErrorException Uncaught
我如何在 PHP 中添加对传递的 $username 长度的检查。该站点是 UTF-8,但我相信 Javascript 使用的是不同的编码。您可以在评论中看到我在 PHP 中尝试了不同的东西但它们不起
我是一名优秀的程序员,十分优秀!