如何替换多维数组中的所有特殊字符?

时间:2017-07-24 09:30:07

标签: php multidimensional-array special-characters

我想替换多维数组中的所有特殊字符:

array(1) {
  ["one"]=>
  array(1) {
    ["two"]=>
    array(1) {
      [three]=>
      array(1) {
        ["four"]=>
        array(1) {
          ["five"]=>
          array(1) {
            ["Ele╠phant"]=>
            array(1) {
              ["My_Ele╠phant_walks.eps"]=>
              array(3) {
                ["six"]=>
                string(106) "one/two/three/four/five/Ele╠phant/My_Ele╠phant_walks.eps"
                ["seven"]=>
                string(6) "seven"
                ["eight"]=>
                string(19) "eight"
              }
            }
          }
        }
      }
    }
  }
}

因此,它应该如下所示:

array(1) {
      ["one"]=>
      array(1) {
        ["two"]=>
        array(1) {
          [three]=>
          array(1) {
            ["four"]=>
            array(1) {
              ["five"]=>
              array(1) {
                ["Ele?phant"]=>
                array(1) {
                  ["My_Ele?phant_walks.eps"]=>
                  array(3) {
                    ["six"]=>
                    string(106) "one/two/three/four/five/Ele?phant/My_Ele?phant_walks.eps"
                    ["seven"]=>
                    string(6) "seven"
                    ["eight"]=>
                    string(19) "eight"
                  }
                }
              }
            }
          }
        }
      }
    }

对于字符串,有一个非常好的工具,它完全符合我的需要:

echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $string);

我正在为数组寻找相同的东西

3 个答案:

答案 0 :(得分:1)

您可以将数组转换为json字符串,转换此字符串中的特殊字符,然后将json字符串转换回数组。

$json = json_encode($array);
$json = iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $json);
$array = json_decode($json, true);

答案 1 :(得分:1)

function a_iconv(array &$arr) {
  foreach ($arr as $key => $val) {
    if (is_array($val)) {
      a_iconv($arr[$key]);
    } else {
      unset($arr[$key]);
      $arr[iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $key)] = iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $val);
    }
  }
}

该功能应该这样做。

function a_iconv(array $src) {
  $dst = array();
  foreach ($src as $key => $val) {
    if (is_array($val)) {
      $dst[iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $key)] = a_iconv($val);
    } else {
      $dst[iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $key)] = iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $val);
    }
  }
  return $dst;
}

应该在不修改原始数组的情况下执行此操作,而是返回新版本。 这两个函数以递归方式应用于原始数组中的任何数组,并在任何非数组条目上应用iconv。我没有检查对象,因为我假设你的阵列中没有对象。如果恰好是这种情况,请使用get_object_vars()

答案 2 :(得分:1)

function custonDecode($src) {
   $dst = array();
   foreach ($src as $key => $val) {
     if (is_array($val)) {
       $dst[iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $key)] = a_iconv($val);
     } else {
       $dst[$key] = iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $val);
     }
  }
  return $dst;
}

 print_r(custonDecode($yourArray));