php - strlen 和特殊字符

标签 php wordpress

我在这里找到解决方案时遇到问题。我正在为使用 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 也可以使单个“字符”如版权符号(“©”)占据许多字符(例如 &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。如果不是,请先转换它。

关于php - strlen 和特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5887629/

相关文章:

javascript - 用于 Wordpress 的 PHP 计算器无法正常运行

css - 源代码中不需要的 CSS

wordpress - 在此服务器上找不到请求的 URL/about

php - 如何根据用户给定的两种颜色生成完整的网站样式表?

javascript - 将数组从 JavaScript 传递到 PHP,而不丢失代码功能

php - 注册脚本 PHP MySQL 不插入数据库

php - wordpress,如何更改页脚中的信息?

javascript - 使用ajax加载表单然后再次使用ajax提交

php - 通用反序列化: JSON ID value to Object

wordpress - 创建新的Docker镜像时,Docker WordPress镜像不会保留wp-content