You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中转义🗡字符及Laravel下字符串截取防非字符串异常处理

PHP中Emoji字符处理及Laravel框架解决方案

1. 如何转义🗡(🗡)字符?

首先要明确:emoji属于UTF-8编码的多字节字符(这个🗡是4字节的Unicode字符),转义场景不同处理方式也不一样:

  • 如果是要将其转换为HTML实体(比如你提到的🗡),可以用htmlentities函数并指定UTF-8编码:

    $emoji = '🗡';
    $escaped = htmlentities($emoji, ENT_QUOTES, 'UTF-8');
    // 输出结果就是 🗡
    

    或者用mb_convert_encoding直接转实体:

    $escaped = mb_convert_encoding($emoji, 'HTML-ENTITIES', 'UTF-8');
    
  • 如果是要在数据库中安全存储,只要你的数据库表使用utf8mb4编码(Laravel默认推荐的编码),就不需要额外转义,直接存储原始字符即可——Laravel的Eloquent会自动处理UTF-8字符的存储。

2. 解决substr截取导致的乱码问题

你遇到的问题根源在于substr是单字节字符串处理函数,而emoji是多字节UTF-8字符,直接截取会破坏字符的字节结构,导致出现乱码(比如你得到的b"—¡ breaks my c"就是被拆分的无效字节序列)。

通用PHP解决方案

使用多字节安全的mb_substr函数,它会识别UTF-8字符的完整字节:

dump(mb_substr('this 🗡 breaks my code', 7, 14, 'UTF-8'));
// 正确返回有效字符串,不会出现乱码

注意一定要指定最后一个参数为'UTF-8',确保函数按UTF-8编码解析字符串。

Laravel框架内置解决方案

Laravel的Illuminate\Support\Str类提供了多字节安全的字符串处理方法,其中Str::substr就是封装了mb_substr的便捷方法,默认使用UTF-8编码:

首先确保引入Str类(或者用Facades):

use Illuminate\Support\Str;

dump(Str::substr('this 🗡 breaks my code', 7, 14));

这样就能直接得到正确的截取结果,完全避免乱码问题。

另外,如果需要对字符串做其他清理(比如去除无效字节、过滤特殊字符),Laravel还提供了这些实用方法:

  • Str::clean():清理字符串中的无效UTF-8字符(Laravel 9+支持)
  • Str::squish():去除多余空格、换行符并合并连续空格
  • Str::replace():安全替换字符串内容(同样支持多字节)

内容的提问来源于stack exchange,提问作者user3743266

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:28:43