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

如何为PHP字符串中的Unicode符号包裹指定span标签?

问题

我从别处复制带Unicode符号的字符串到HTML表单,后端PHP处理代码如下:

$string  = "❖ The Low Pressure ❖ Strong ✓ Light";
$string_new  = htmlentities($string);

将转换后的字符串存入MySQL数据库后,使用TCPDF生成PDF,当前PDF输出代码为:

$pdf->AddFont('dejavusans'); 
$pdf->AddFont('helvetica'); 
$pdf->SetFont ('helvetica', '', '10' , '', 'default', true );

从数据库取出数据后执行以下代码输出:

$string = html_entity_decode($line);
$pdf->writeHTML($string , true, false, true, false, '');

目前PDF输出正常,但我希望让字符串中的Unicode符号(如❖、✓)用dejavusans字体显示,英文内容保留helvetica字体,需要把所有Unicode符号包裹在带有font-family:dejavusans;样式的<span>标签中,转换后的目标字符串如下:

$string = "<span style=\"font-family:dejavusans;\">❖</span> The Low Pressure <span style=\"font-family:dejavusans;\">❖</span> Strong <span style=\"font-family:dejavusans;\">✓</span> Light";

请问如何实现给初始字符串中的所有Unicode符号自动添加对应的<span>标签?

解决方案

可以通过PHP的正则表达式替换功能,精准匹配字符串中的Unicode符号并包裹指定<span>标签,具体实现代码如下:

方法一:匹配所有非ASCII字符(适用于大部分符号场景)

// 先解码从数据库取出的内容
$string = html_entity_decode($line);

// 用正则替换,将所有非ASCII的Unicode字符包裹到span中
$formattedString = preg_replace('/([^\x00-\x7F])/', '<span style="font-family:dejavusans;">$1</span>', $string);

// 输出到PDF
$pdf->writeHTML($formattedString, true, false, true, false, '');

方法二:精准匹配特定Unicode符号(更可控)

如果只需要处理指定的符号(比如❖、✓这类),可以直接匹配这些字符的Unicode编码,避免误匹配其他非英文内容:

$string = html_entity_decode($line);
// 匹配❖(U+2756)和✓(U+2713)等符号,可根据需求添加更多
$formattedString = preg_replace('/(\x{2756}|\x{2713})/u', '<span style="font-family:dejavusans;">$1</span>', $string);
$pdf->writeHTML($formattedString, true, false, true, false, '');

说明

  • 正则表达式中的[^\x00-\x7F]表示匹配所有ASCII范围外的字符,覆盖绝大多数Unicode符号;
  • 方法二中的/u修饰符必须添加,确保PHP正确识别Unicode编码的正则匹配;
  • TCPDF的writeHTML方法支持解析内联CSS样式,因此包裹后的符号会自动使用dejavusans字体渲染,英文内容则继承全局设置的helvetica字体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:30:11