UTF-8 的多字节安全 wordwrap() 函数

2024-01-23

PHP's wordwrap() https://www.php.net/wordwrap对于 UTF-8 等多字节字符串,该函数无法正常工作。

评论中有一些mb安全函数的例子,但是根据一些不同的测试数据,它们似乎都存在一些问题。

该函数应采用与以下完全相同的参数wordwrap().

具体来说,请确保它能够:

  • 切掉单词中间 if$cut = true,否则不要在单词中间剪切
  • 不在单词中插入额外的空格,如果$break = ' '
  • 也为$break = "\n"
  • 适用于 ASCII 和所有有效的 UTF-8

我还没有找到任何适合我的工作代码。这是我写的。对我来说它正在工作,但认为它可能不是最快的。

function mb_wordwrap($str, $width = 75, $break = "\n", $cut = false) {
    $lines = explode($break, $str);
    foreach ($lines as &$line) {
        $line = rtrim($line);
        if (mb_strlen($line) <= $width)
            continue;
        $words = explode(' ', $line);
        $line = '';
        $actual = '';
        foreach ($words as $word) {
            if (mb_strlen($actual.$word) <= $width)
                $actual .= $word.' ';
            else {
                if ($actual != '')
                    $line .= rtrim($actual).$break;
                $actual = $word;
                if ($cut) {
                    while (mb_strlen($actual) > $width) {
                        $line .= mb_substr($actual, 0, $width).$break;
                        $actual = mb_substr($actual, $width);
                    }
                }
                $actual .= ' ';
            }
        }
        $line .= trim($actual);
    }
    return implode($break, $lines);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UTF-8 的多字节安全 wordwrap() 函数 的相关文章

  • mysqli bind_param 中的 NULL 是什么类型?

    我正在尝试将参数绑定到 INSERT INTO MySQLi 准备好的语句 如果该变量存在 否则插入 null 然后我知道 type variable i corresponding variable has type integer d
  • 如何在 Zend Framework 中处理移动设备?

    我接手了一个噩梦般的项目 我正在迁移一个写得很差的站点 并慢慢地将其迁移到 Zend Framework 应用程序中 不幸的是 我没有时间做补救工作 使这变得可以忍受 也许是一个或两个模型 我现在被告知该网站很快就会有移动版本 建议是克隆旧
  • 来自本地 XML 的模拟 SoapClient 响应

    我想用文件中的 XML 来模拟 SoapClient 的响应 我如何创建一个 stdClass 对象 就像 SoapClient 从文件返回一样 客户端已经包装了 SoapClient 因此可以轻松模拟响应 我的模拟是这样的 soapCli
  • JavaScript 中带前导零的数字发生变化

    我使用 print 语句从 php 调用 javascript 函数来打印 html 代码 并且传入一个整数 但是 在 php 中传递的值与 javascript 函数接收到的数字不匹配 我不知道为什么 这是调用 javascript 函数
  • 用于开始和/或包含搜索的最快字符串集合结构/算法是什么

    我有以下情况 我有一个大的字符串集合 比如说 250 000 平均长度可能是 30 我要做的就是在这些搜索中进行许多搜索 大多数搜索都是 StartsWith 和 Contains 类型的 该集合在运行时是静态的 这意味着选择的集合的初始读
  • Doctrine 1 和 Symfony 1 的多个主键?

    我已经知道在 Symfony 1 和 Doctrine 1 中不可能使用多个主键 但是你们知道有什么好的解决方法吗 除了多对多关系之外 原则 1 不适用于多列上的主键 但如果你想使用多对多关系 请像这样使用 BlogPost columns
  • Yii2 中 init() 和 __construct() 方法有什么区别

    init 方法 public function init construct method public function construct 那么 它们之间有什么区别 应该使用哪一个呢 init 是从以下对象扩展的任何对象的方法yii b
  • 在 null laravel 上调用成员函数 save()

    大家好 我正在使用 laravel 5 多态关系将数据保存在数据库中 但我遇到了一些问题 当我尝试将数据保存在数据库中时 它会抛出此错误 对 null 调用成员函数 save 我不知道为什么我会遇到这个错误 我正在关注多态关系的本教程在 L
  • 经典的asp字符编码

    我在经典 asp 网站中遇到西班牙字符问题 用户可以在 aspx 页面上的表单中提交他们的姓名 地址 然后 aspx 页面将 ajax post 发送到经典的 asp 页面 它所做的所有操作都存储在我们的 Sql 2008 DB 中 我可以
  • PHP 错误警告:参数 1 应该是引用

    我 熟悉 PHP 我的朋友的网站因错误而崩溃 Warning Parameter 1 to Some function name expected to be a reference value given in public html i
  • 字符串池可以包含两个具有相同值的字符串吗? [复制]

    这个问题在这里已经有答案了 字符串池可以包含两个具有相同值的字符串吗 String str abc String str1 new String abc Will the second statement with new operator
  • wordpress - 像 stackoverflow 中那样内嵌 ajax 注释

    我有一个 WordPress 博客 希望为人们提供与 stackoverflow 中添加评论相同的用户体验 有很多评论 ajax 插件 但我找不到一个可以使用的插件 它允许您在主页上内联 进入并添加评论 而无需先深入到单独的单个帖子页面 任
  • 接口中的构造方法

    接口中的构造方法不好吗 为什么人们认为有人想要实例化接口 我们想要做的是强制实现者实现构造函数 就像其他接口方法一样 接口就像一个合同 假设我有一个接口 Queue 并且我想确保实现者创建一个带有一个参数的构造函数 该构造函数创建一个单例队
  • PHP 中的多个插入查询[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个 php html 表单 它将结果插入到狗展数据库中 问题是 无论我做什么 我都会收到此错误 查询失败 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 INSE
  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • 谷歌日历手表过期时间超过1个月怎么办?

    我将我的 CRM 系统与 Google 日历同步 为此 我要求push notifications从我的用户 Google 日历到我的系统 我已经成功创建了手表 并将过期时间设置为2030年 但是当我收到手表事件的响应时 它显示手表的过期时
  • 使用“INSERT ... ON DUPLICATE KEY UPDATE”插入多条记录

    我的表结构 table marks 我的目标 我想用条件插入或更新多条记录 我目前正在通过此查询进行检查 第一步 SELECT FROM marks WHERE student 115 AND param 1 第二步 if records
  • 如何在 PHP 中从字符串类名实例化? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何创建返回方法名称的新实例 不幸的是我收到这个错误 错误 类名必须是有效的对象或字符串 这是我的代码 class Foo public f

随机推荐

  • 如何使用DiagrammeR 创建网络图?

    我有一个很大的数据集 但让我们举一个简单的例子 mydata lt data table from c John John Jim to c John Jim Jack nodesd unique c mydata from mydata
  • Firebase Android ListView 未显示

    我试图在用户登录后在主菜单屏幕的列表视图上显示 Firebase 实时数据库中的数据 应用程序正在运行 但不显示数据 这是我数据库中的数据 现在来说说代码 MainMenu java 该函数在 OnCreate 上调用 public voi
  • Dart 库/包关键字的含义?

    Is 飞镖库一模一样Java包 Is 飞镖包一模一样Java库 JAR 包是一组库 例如可以部署到 pub dartlang org 我猜这类似于 jar 文件 库是一个带有或不带有名称的 Dart 脚本文件 或者一组带有名称的 Dart
  • 在 Android Studio 项目中使用 libsodium

    我正在尝试在 android studio 项目中使用 libsodium 库 但是 我无法弄清楚如何做到这一点 我从 libsodium 网站下载了该库 但不明白如何创建 android studio 项目所需的库文件 任何帮助将不胜感激
  • 为什么递归函数只遍历一个子目录

    我已经找到了让我的代码正常工作的答案 但我想知道为什么它可以工作而我的代码却不能 rFunc for d in do if d d then cd d rFunc fi Do Something done 这段代码只会通过一个子目录 但如果
  • 关闭 ModalViewController 后刷新父 ViewController

    在我的 iOS 应用程序中 用户可以从列表中选择图像 然后会看到一个包含该图像和删除该图像的选项的模式 如果用户选择删除图像 她将返回到包含图像列表的原始视图控制器 然后我需要刷新原始 ViewController 以考虑已删除的图像 我尝
  • ' aria-label='无法使用以下类型的值设置 MODEL_NAME SpatialProxy (POLYGON):'> 无法使用以下类型的值设置 MODEL_NAME SpatialProxy (POLYGON):

    当我尝试对我的模型的 url 进行 API 调用时 我面临以下问题 Cannot set Allotment SpatialProxy POLYGON with value of type
  • Objective-C 中 NSArray 的子类

    我需要一个类 它具有 NSArray 的所有方法 其行为方式相同 但修改了 2 个方法 我想在我的自定义类中重写这两个方法 1 countByEnumerateWithState 对象 计数 2 对象索引 经过几个小时的研究 我没有找到任何
  • Simple_form:删除带标签的内联复选框的外部标签

    使用 Simple form 2 0 2 使用 HAML 的简单表单代码 f input remember me as boolean inline label Remember me 但它呈现出这样的效果 div class contro
  • ++、last 和 init 比 :、head 和 tail 更快?

    给出这两种编写函数来查找特定数字之前的所有素数的方法 primes1 iterate ps gt ps x x lt last ps 1 all p gt x mod p 0 ps 0 2 primesTo1 Integer gt Inte
  • 为在线商店生成订单号的最佳方法?

    我的在线商店中的每个订单都有一个面向用户的订单号 我想知道生成它们的最佳方法 标准包括 Short 通过电话很容易说出来 例如 m 和 n 是不明确的 Unique 校验和 矫枉过正 有用吗 Edit 不会透露订单总数 客户可能会因为下第三
  • 如何在 xcode 上禁用静态库的链接器警告?

    在我当前的 Swift 项目中 我有一个第 3 方静态库 是通过 构建阶段 gt 链接二进制文件与库 部分添加的 更新到 xcode 8 3 后 该库开始抛出一些链接器警告 例如 指针未在 libraryFile a 的地址 0x00000
  • 在 JavaScript 中从对象创建 DOM 元素

    嗨 我试图了解如何制作 Dom elemnt 比如说 div 形成我的数据对象 我做了一个这样的对象 var div style width Math floor Math random 100 height Math floor Math
  • 使用 Fluent NHibernate 和 guid id

    我们正在使用 Fluent NHibernate 1 2 我们的主键是保存在nvarchar 32 专栏 使用 Oracle 11gr2 我们怎样才能做到这一点 进行自动转换 谢谢 随机程序员 更新 忘了提及 保存的 guid 没有破折号
  • 启动 Facebook 转换像素

    我对 Javascript 还很陌生 但我想知道在不实际加载 确认 谢谢 页面的情况下触发 Facebook 转换像素 如下 的最佳方法是什么
  • Android 本地服务器套接字

    在android中 有两个类LocalServerSocket和LocalSocket 我认为它们类似于unix套接字中的AF LOCAL 我不确定它是否正确 我的问题是 是否可以在Java中创建LocalServerSocket并使用普通
  • Unity 在使用 Firebase 数据库进行异步编程时崩溃

    当我尝试这样做时它崩溃了 我想要异步获取用户数据 如果我不使用异步任务 它会返回 null public class Database MonoBehaviour private DatabaseReference m database p
  • Vue.js 中的计算属性未使用 navigator.onLine 更新

    我想使用 Vue js 计算属性来查看我的应用程序的在线状态 基本上 我有以下 Vue 设置 new Vue el app computed onLine function return navigator onLine 以及以下标记 di
  • 安装后如何更改应用程序的图标和标签?

    我正在尝试在安装应用程序后更改其图标和标签 在清单中 我放置了以下代码
  • UTF-8 的多字节安全 wordwrap() 函数

    PHP s wordwrap https www php net wordwrap对于 UTF 8 等多字节字符串 该函数无法正常工作 评论中有一些mb安全函数的例子 但是根据一些不同的测试数据 它们似乎都存在一些问题 该函数应采用与以下完