Php 为什么utf8字符看起来像问号?
我在我的网站上有一个表格。我正在查看ui面板上的表单值。如果单词长度大于12,则函数将在其旁边放置一个空格。但当我打印值时,如果值是utf8,我会得到错误Php 为什么utf8字符看起来像问号?,php,Php,我在我的网站上有一个表格。我正在查看ui面板上的表单值。如果单词长度大于12,则函数将在其旁边放置一个空格。但当我打印值时,如果值是utf8,我会得到错误 $text= 'üğqwoweğofkeiasş övafevpğeüqrg qğekqrğofteölzfs'; function parser($str, $parse) { $strlength = strlen($str); $counter = 0; $query = ''; if($strlen
$text= 'üğqwoweğofkeiasş övafevpğeüqrg qğekqrğofteölzfs';
function parser($str, $parse) {
$strlength = strlen($str);
$counter = 0;
$query = '';
if($strlength > $parse) {
for($i = 0; $i < $strlength; $i++) {
if($str[$i] != ' ') {
$counter++;
}
if($counter == $parse) {
$query.=$str[$i];
$query.=' ';
$counter = 0;
}
if($counter != $parse) {
$query.=$str[$i];
}
if($counter != $parse & $str[$i] == ' ') {
$counter = 0;
}
}
return $query;
}
else {
return $str;
}
}
echo parser($text,12);
而且它不是一直都在发生,只是有时候;我不明白为什么会这样。代码:
function parser($string, $max_length = 12)
{
$chars = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);
$i = 0;
foreach ($chars as $index => $char)
{
if ($char === ' ') { $i = 0; }
else { $i++; }
if ($i >= $max_length)
{
$chars[$index] = $char . ' ';
$i = 0;
}
}
return implode('', $chars);
}
$result = parser('üğqwoweğofkeiasş övafevpğeüqrg qğekqrğofteölzfs');
结果:iasşvafevpğeüqr g qğekqrğof teölzfsuser
strlen
不是多字节安全的,类似于我想我试过的mbğstrlen($text,'utf-8');但是不起作用:($str[$i]
表示法也在提取单字节。你需要提取完整字符。我如何提取完整字符:?üğqwoweğo
是9个字符。为什么有空格?我在想类似于preg_replace('/\w{12}/u','0',$text)的东西)
在解析器内部添加$parse=mb_convert_变量('utf-8','original encode',$parse);
解决了这个问题,我不明白它是如何解决的:?在PHP中处理str*函数意味着处理字节,而不是字符。它适用于ASCII(英语和西班牙语)因为1个字符是1个字节,但是当你尝试对其他语言做同样的事情时,每个字符有2个以上的字节,你会把这个字符减半,然后看到一个� 标记。这里不需要您的mb\u convert\u变量
,您只需了解您所做的工作,然后您就会发现如何做。
function parser($string, $max_length = 12)
{
$chars = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);
$i = 0;
foreach ($chars as $index => $char)
{
if ($char === ' ') { $i = 0; }
else { $i++; }
if ($i >= $max_length)
{
$chars[$index] = $char . ' ';
$i = 0;
}
}
return implode('', $chars);
}
$result = parser('üğqwoweğofkeiasş övafevpğeüqrg qğekqrğofteölzfs');