PHP-strlen返回由引号引起的不正确字符串长度

PHP-strlen返回由引号引起的不正确字符串长度,php,strlen,Php,Strlen,我有来自数据库的以下字符串:让我们开始函数化 如果我通过strlen运行它,它将返回25个字符,而不是预期的20个字符。var转储显示字符串类似于上面的no-html引用等 如果删除单引号,strlen将返回19个字符 显然,引号返回的是5个字符而不是1个-为什么?我怎样才能阻止这一切 谢谢 不可能 <?php $str = "Let's Get Functional"; echo strlen($str), "\n"; // 20 此代码返回20

我有来自数据库的以下字符串:让我们开始函数化

如果我通过strlen运行它,它将返回25个字符,而不是预期的20个字符。var转储显示字符串类似于上面的no-html引用等

如果删除单引号,strlen将返回19个字符

显然,引号返回的是5个字符而不是1个-为什么?我怎样才能阻止这一切

谢谢

不可能

<?php
$str = "Let's Get Functional";
echo strlen($str), "\n"; // 20
此代码返回20个字符。

ASCII实体名称为&apos;对于',等于5个字符:

这个问题似乎与“你的”是被评估的,而不仅仅是被读取的这一事实有关。 尝试像这样获取字符串:

$myString = 'Hello World!';
不是这样的:

$myString = "Hello World!";
它读取并计算字符串的所有内容,而不仅仅是读取,从而将特殊字符解释为ASCII码

PHP手册上说:

我认为您的strlen函数是使用包含的参数调用的,因此它给出的是经过计算的strlen,而不是读取的strlen

试试这个:

$countChars = strlen(utf8_decode($myString));

查看有关简单引号和双引号之间差异的更多信息。

正如@deformhead已经解释的,您的撇号似乎已转换为HTML&apos;一串我的猜测是,在从数据库中取出字符串和调用strlen之间,你可以在两者之间调用htmlentities

您还可以使用CHAR_LENGTH MySQL检查select查询中从数据库中获得的字符数

另一个问题可能是Strun对多字节字符不太有效,所以如果你使用非ASCII字符,那么你最好使用正确的编码的MbStruLLN。但是,本例无法解释结果中5个字符的差异。strlen计算字节,而不是字符串中的字符


希望对你有所帮助。

我和你有同样的问题,也许这会帮助别人

单报价转换为39英镑;这给了我不正确的结果。 简单地用单引号替换字符串就解决了我的问题

$string=让我们开始功能化//来自POST或数据库的字符串

echo strlen$字符串//二十五

$string=str_替换“,”,$string;
echo strlen$字符串//20

用结果显示两个var_转储代码您是否可以粘贴您使用的代码。使用quote:string25让我们获取函数不使用quote:string19让我们获取函数请将您的代码粘贴到此处:是的,谢谢。。我知道它应该返回20,但它返回25,这是我在原始问题中所说的。CMS可能添加了一些奇怪的编码或字符,我正试图找出原因,以便消除它们。你在问题中从未提及任何CMS。我们只能根据您提出的问题提供答案。您使用的是什么CMS,该代码在CMS中的什么位置?可能是$string已经在别处设置了吗?为什么不试着用另一个变量看看它是否有效呢。e、 g$myString=让我们开始功能化;
$myString = 'Hello World!';
$myString = "Hello World!";
$countChars = strlen(utf8_decode($myString));