Php 从多维输入数组中删除无效的UTF-8?
$\u POST数组可以是多维的。我的代码删除了无效的UTF,但也完全删除了子数组 运行此代码:Php 从多维输入数组中删除无效的UTF-8?,php,unicode,utf-8,Php,Unicode,Utf 8,$\u POST数组可以是多维的。我的代码删除了无效的UTF,但也完全删除了子数组 运行此代码: print_r($_POST); $UTF8_Input = array_map('_StripInvalidUTF8', $_POST); print_r($UTF8_Input); function _StripInvalidUTF8($str){ return iconv('UTF-8', 'UTF-8//IGNORE', $str); } 产生: //$_P
print_r($_POST);
$UTF8_Input = array_map('_StripInvalidUTF8', $_POST);
print_r($UTF8_Input);
function _StripInvalidUTF8($str){
return iconv('UTF-8', 'UTF-8//IGNORE', $str);
}
产生:
//$_POST:
Array
(
[Quantity] => 1
[Options] => Array
(
[84] => 585
)
)
// $UTF8_Input:
Array
(
[Quantity] => 1
[Options] =>
)
正在截断选项数组。关于如何检查子数组中的有效数据并保持其完整性(如果是)有何建议?我不确定它们被移除的确切原因。试试看
function _StripInvalidUTF8($str){
if(is_array($str)) return array_map('_StripInvalidUTF8', $str);
return iconv('UTF-8', 'UTF-8//IGNORE', $str);
}
我认为递归函数可能是答案,但这个并不完全正确。如果
$str
是一个数组,它会运行array\u map,但不会将结果存储在任何地方。即使$str
是一个数组,它也会尝试在$str
上运行iconv。您需要在数组映射之前添加return
(“'u StripInvalidUTF8',$str”)代码>。这样,如果它是一个数组,则返回array\u map
的结果;如果它是一个字符串,则返回iconv的结果。