strlen&特别的字符

时间:2011-05-04 17:47:10

标签: php wordpress

我在这里找到一个解决方案的问题。我正在为一个客户端开发一个WordPress主题,该客户端使用for()循环遍历页面标题,以便它可以包含在{{ 1}}并且垂直显示..循环使用<span>来查找标题的长度,但由于某些页面标题中包含“...”或逗号,因此它返回html字符而不是...我无法弄清楚造成这种情况的原因,strlen()htmlspecialchars_decode()的所有努力都无效..任何建议?我现在知道的for循环有什么问题吗?

因为这里要求的是实际代码:

html_entity_decode()

我也尝试过使用mb_strlen ..搜索要替换的特定字符的问题不一定能解决问题,因为页面标题是由网站所有者任意设置的。

奇怪的是,Title没有以任何方式编码,并且通常在for循环之前回显..所以就好像有东西正在转换它..

2 个答案:

答案 0 :(得分:5)

strlen()仅返回字符串中 bytes 的数量。一些特殊字符可以用多个字节表示,Unicode也可以使单个“字符”像版权符号(“©”)占用许多字符(例如&copy;)。

您的“...”(省略号)可以是special character in Unicode

我建议快速而肮脏的解决方案:

// Example string should be 1 character long, 6 bytes
$text = "&copy;";
$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()并查看它是否能完成这项工作吗?

http://php.net/manual/en/function.mb-strlen.php