我在这里找到一个解决方案的问题..我正在为一个客户端开发一个WordPress主题,它使用一个for()循环遍历页面的标题,因此它可以用<span>s 包装并垂直显示..循环使用strlen()到找到标题的长度,但由于某些页面标题中包含"..."或标题中的逗号,它会返回html字符而不是......我无法弄清楚是什么导致了这一点,而且每一次努力都是通过htmlspecialchars_decode()或html_entity_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>";
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用mb_strlen ..搜索要替换的特定字符的问题不一定能解决问题,因为页面标题是由网站所有者任意设置的.
奇怪的是标题没有以任何方式编码,并且通常在for循环之前回显.所以就好像有东西在转换它一样.
这听起来很像多字节字符的字符编码问题。您可以尝试替换strlen()为mb_strlen()并查看它是否可以完成工作吗?
http://php.net/manual/en/function.mb-strlen.php
strlen()仅返回字符串中的字节数.一些特殊字符可以用多个字节表示,Unicode也可以使单个"字符"像版权符号("©")占用许多字符(例如©).
例如,您的"..."(省略号)可以是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";
Run Code Online (Sandbox Code Playgroud)
请注意,我假设您的字符串已经是UTF-8.如果不是,请先转换它.
| 归档时间: |
|
| 查看次数: |
4644 次 |
| 最近记录: |