【发布时间】:2018-07-24 01:14:18
【问题描述】:
使用函数strtr() 或str_ireplace() 或preg_replace() 和array_walk_recursive(),我尝试删除多维数组中的错误字符编码,数据以UTF-8 编码并且来自Curl 查询。
我想通过只保留正确编码的重音字符来删除双重编码:
ã©école => école
Array
(
[0] => Array
(
[0] => ã©cole
[1] => Array
(
[0] => ã©ecole al inara avenue 2 mars casablanca
[1] => ã©ecole 42
[2] => grande ã©école
)
)
)
使用 PHP 7.2.6 执行此操作时,我的代码出现错误,这是一种不好的方法吗?
致命错误:未捕获的 ArgumentCountError:参数太少 功能
function fix_utf8(&$value, $key)
{
$char = array('é','É','è','ê','ë','Ã','à¢','ù','î','ô','ë','ö','ü','à»','ç','à§','Å“','’','…','Å“','–','«','»','‚');
$value = str_ireplace($char, '', $value);
}
$result = array_walk_recursive($result, 'fix_utf8');
print_r($result);
或
致命错误:未捕获的 ArgumentCountError:函数 fix_utf8() 的参数太少,传入了 1 个
function fix_utf8(&$value, $key)
{
$char = array('é'=>'','É'=>'','è'=>'','ê'=>'','ë'=>'','Ã'=>'','à¢'=>'','ù'=>'','î'=>'','ô'=>'','ë'=>'','ö'=>'','ü'=>'','à»'=>'','ç'=>'','à§'=>'','Å“'=>'','’'=>'','…'=>'','Å“'=>'','–'=>'','«'=>'','»'=>'','‚'=>'');
$value = strtr(strtoupper($value), $char);
}
$result = array_walk_recursive($result, 'fix_utf8');
print_r($result);
或
function fix_utf8(&$value, $key)
{
$char = array('/é/','/É/','/è/','/ê/','/ë/','/Ã/','/à¢/','/ù/','/î/','/ô/','/ë/','/ö/','/ü/','/à»//','//ç/','/à§/','/Å“/','/’/','/…/','/Å“/','/–/','/«/','/»/','/‚/');
$value = preg_replace($char, '', $value);
}
$result = array_walk_recursive($result, 'fix_utf8');
print_r($result);
更新:
精度:CuRL 请求检索 JSON 格式并包含 Unicode 字符的内容
["école",["école d\u0027ingénieur"]]
【问题讨论】:
-
删除“违规”字符弊大于利。正确解码,两次。