我在这里找到解决方案时遇到问题。我正在为使用 for()
的客户开发 WordPress 主题。循环遍历页面标题,以便将其包装在 <span>
中s 并垂直显示.. 循环使用 strlen()
找到标题的长度,但由于某些页面标题在标题中包含“...”或逗号,因此它返回 html 字符。或 htmlspecialchars_decode()
不起作用..有什么建议吗?我现在知道的 for 循环有什么问题吗?
由于这里要求的是实际代码:
$p_title = get_the_title($port_page->ID);
$title = '';
for($i=0;$i<strlen($p_title);$i++){
if(($p_title[$i])){
$title .="<span>$p_title[$i]</span>";
}
我也尝试过使用 mb_strlen .. 搜索特定字符来替换的问题不一定能解决问题,因为页面标题是由站点所有者任意设置的。
奇怪的是标题没有以任何方式编码, echo 通常在 for 循环之前..所以好像有什么东西正在转换它..
最佳答案
strlen()
只返回字符串中的字节数。一些特殊字符可以用多个字节表示,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。如果不是,请先转换它。
关于php - strlen 和特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5887629/