Php 从多维输入数组中删除无效的UTF-8?

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

$\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);      
}
产生:

//$_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的结果。