【发布时间】:2021-10-21 12:59:50
【问题描述】:
我正在尝试做一个印刷装饰的生成器,每次调用都会产生类似“{(©+Φ+©)}”的东西。我有一些字符串,其中包含我使用 str_split() 转换为数组的装饰物每一侧的字符。我的问题是它们出现时带有臭名昭著的问号图标 �,有时我会收到错误“未定义的偏移量”。我错过了什么吗?也许使用 UTF-8 编码? --感谢任何提示!
function ornamento() {
$izq = str_split("[{(]})");
$der = str_split("]})[{(");
$med = str_split("+÷×=#®©$%&?¿");
$cen = str_split("ΔΘЖΣΤΥΦΧΨΩ");
$idx1 = rand(1,sizeof($izq));
$idx2 = rand(1,sizeof($izq));
$mix1 = rand(1,sizeof($med));
$mix2 = rand(1,sizeof($med));
$cix = rand(1,sizeof($cen));
$ornamento = $izq[$idx1] . $izq[$idx2] . $med[$mix1] . $med[$mix2] . $cen[$cix] . $med[$mix2] . $med[$mix1] . $der[$idx2] . $der[$idx1];
echo $ornamento;
}
【问题讨论】:
-
substr()对字节偏移进行操作,非拉丁 UTF8 字符使用 2 个或更多字节。对此使用mb_substr(),对其他操作使用等效的mb_*()函数。 php.net/manual/en/book.mbstring.php
标签: php utf-8 character-encoding