我想计算某个字符串在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网站)
答案 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(),它将解决