在php中计算字符

时间:2010-08-09 16:53:38

标签: php

我想计算某个字符串在PHP中有多少个字符,但是我无法让它工作。

我做了一个var_dump,这就是我得到的:

string(23) "Children’s Center"

好像'被翻译为’s

这使得无法获得实际的字符数。我尝试使用html_entity_decode,但没有帮助。

任何?

编辑: 我的功能现在看起来像这样:

function make_shorter($string, $maxlength)
{
 $string = stripslashes($string);   
 $string = html_entity_decode($string);
 if ( mb_strlen(utf8_decode($string)) > $maxlength)
  return substr($string,0,$maxlength).'...';
 else
  return $string;
}

我无法改变数据进入系统的方式。我只能修改它的输出。

(这是一个wordpress网站)

4 个答案:

答案 0 :(得分:3)

  

似乎'被翻译为’ s

这是单右智能引用的的HTML字符引用,有些人也用它来表示撇号(特别是那些用MS Word键入的撇号)。在您处理的某个时间点,某些内容已将htmlentities()应用于您的数据。

在将文本插入HTML页面时,只应在输出阶段执行HTML转义。所以回过头来看看你是否有一个函数做一些愚蠢的事情,比如在htmlentities() / $_POST / $_GET数组的每个条目上调用$_REQUEST。这是尝试阻止XSS攻击的常见但完全虚假的方法。如果您看到它,那么您在某些时候需要将其取出并通过模板在每次将变量放入HTML时添加适当的HTML转义。

无论哪种方式,都使用htmlspecialchars()而不是htmlentities(),它会保留非{ASCII}字符,例如

html_entity_decode()肯定应该撤消上面的编码,留下原始字符串。但是,可能仍然计为一个或两个字节,具体取决于您解码的编码。如果您想正确计算字符并且您有UTF-8字符串,则需要mb_strlen()

答案 1 :(得分:1)

您使用的是正确的单引号,而不是'字符。好吧......停下来!

$string = "Children's Center";

echo strlen($string); // 17

谷歌这可以看出差异:’ '

答案 2 :(得分:0)

echo strlen($myString); 

echo strlen(utf8_decode($myString)); 

答案 3 :(得分:0)

尝试strlen(),它将解决