PHP str_split 和 UTF8 抛光字符

wayfarer 阅读:97 2025-01-19 22:14:33 评论:0

我在用 utf-8 波兰字符分割单词时遇到问题。

我一直在检查 str_split 的 php 文档,但没有设置字符集的参数。

我有一句话:“mała” 而且我必须按字母拆分它以用 span 包装每个字母并在结果中返回 html 字符串。

str_split('mała') 的结果:

array:5 [ 
  0 => "m" 
  1 => "a" 
  2 => b"Å" 
  3 => b"‚" 
  4 => "a" 
] 

json_last_error_message() 返回 “格式错误的 UTF-8 字符,可能编码错误” 错误,所以我认为这是与波兰字母有关的问题,但我找不到设置 str_split 字符集的方法.

这里准备好要进行 JSON 编码的数组:

array:2 [ 
  "pieces" => array:6 [ 
    0 => "<span class="dropable">m</span><span class="dropable">a</span><span class="dropable">m</span><span class="dropable">a</span>" 
    1 => "<span class="dropable">m</span><span class="dropable">a</span><span class="dropable">s</span><span class="dropable">a</span>" 
    2 => "<span class="dropable">m</span><span class="dropable">a</span><span class="dropable">p</span><span class="dropable">a</span>" 
    3 => b"<span class="dropable">m</span><span class="dropable">a</span><span class="dropable">Å</span><span class="dropable">‚</span><span class="dropable">a</span>" 
    4 => "<span class="dropable">m</span><span class="dropable">a</span><span class="dropable">c</span><span class="dropable">a</span>" 
    5 => "<span class="dropable">m</span><span class="dropable">a</span><span class="dropable">t</span><span class="dropable">a</span>" 
  ] 
  "engine" => "Wstepne" 
] 

索引号 3 在字符串和这些格式错误的字符之前包含奇怪的“b”。

生成这些字符串的代码是:

$htmlString = ''; 
foreach(str_split($piece) as $key => $letter){  
    $htmlString .= '<span class="dropable">'.$letter.'</span>'; 
} 
return $htmlString; 

尝试在 $letter 上使用 utf8_encode,它修复了字符串前面的 b 问题,但仍然创建了 2 个跨度:

3 => "<span class="dropable">m</span><span class="dropable">a</span><span class="dropable">Å</span><span class="dropable">‚</span><span class="dropable">a</span>" 

还有什么想法吗?

感谢您的帮助

请您参考如下方法:

str_split 适用于字节级别而不是字符级别(尽管它的名称)。因此,实际上您是在 mała 沿其字节而不是沿其字符拆分。这就是为什么你得到一个由五个项目而不是四个项目组成的数组。索引 2 和 3 一起构成 ł 的 UTF-8 编码。

您需要使用 mbstringiconv 扩展名来手动拆分字符串。

$str = 'mała'; 
$len = mb_strlen($str, 'UTF-8'); 
$result = []; 
for ($i = 0; $i < $len; $i++) { 
    $result[] = mb_substr($str, $i, 1, 'UTF-8'); 
} 
var_dump($result); 


标签:PHP
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号