我在这里找到一个解决方案的问题。我正在为一个客户端开发一个WordPress主题,该客户端使用for()
循环遍历页面标题,以便它可以包含在{{ 1}}并且垂直显示..循环使用<span>
来查找标题的长度,但由于某些页面标题中包含“...”或逗号,因此它返回html字符而不是...我无法弄清楚造成这种情况的原因,strlen()
或htmlspecialchars_decode()
的所有努力都无效..任何建议?我现在知道的for循环有什么问题吗?
因为这里要求的是实际代码:
html_entity_decode()
我也尝试过使用mb_strlen ..搜索要替换的特定字符的问题不一定能解决问题,因为页面标题是由网站所有者任意设置的。
奇怪的是,Title没有以任何方式编码,并且通常在for循环之前回显..所以就好像有东西正在转换它..
答案 0 :(得分:5)
strlen()
仅返回字符串中 bytes 的数量。一些特殊字符可以用多个字节表示,Unicode也可以使单个“字符”像版权符号(“©”)占用许多字符(例如©
)。
您的“...”(省略号)可以是special character in Unicode。
我建议快速而肮脏的解决方案:
// Example string should be 1 character long, 6 bytes
$text = "©";
$bytes = strlen($text);
mb_internal_encoding('UTF-8');
$text = html_entity_decode($text, ENT_QUOTES, "UTF-8");
$length = mb_strlen($text);
print "String is ".$length." characters long, ".$bytes." bytes long";
请注意,我假设您的字符串已经是UTF-8。如果不是,请先转换它。
答案 1 :(得分:1)
这听起来很像多字节字符的字符编码问题。您可以尝试用strlen()
替换mb_strlen()
并查看它是否能完成这项工作吗?