【问题标题】:How to convert php array to utf8?如何将php数组转换为utf8?
【发布时间】:2013-05-17 07:02:01
【问题描述】:

我有一个数组:

require_once ('config.php');
require_once ('php/Db.class.php');
require_once ('php/Top.class.php');

echo "db";

$db = new Db(DB_CUSTOM);
$db->connect();

$res = $db->getResult("select first 1 * from reklamacje");

print_r($res);

我想将它从 windows-1250 转换为 utf-8,因为我有像 �这样的字符

最好的。

【问题讨论】:

  • 可以使用string utf8_encode(string $data)函数。
  • 如果您最初以正确的编码存储/检索数据怎么办?解决问题的根源而不是后果是有意义的
  • $res = array_map('utf8_encode', $res);.
  • @Leri 这不适用于多维数组。

标签: php arrays utf


【解决方案1】:
$utfEncodedArray = array_map("utf8_encode", $inputArray );

完成这项工作并返回带有数字键(不是 assoc)的序列化数组。

【讨论】:

  • 非常适合我! :)
  • utf8_encode() expects parameter 1 to be string, array given; PHP 7.4.4.
  • 刚刚用 7.4.3 测试过——没有抱怨——你确定你的输入数组不包含任何数组元素吗?这个解决方案不是递归的!
【解决方案2】:
array_walk(
    $myArray,
    function (&$entry) {
        $entry = iconv('Windows-1250', 'UTF-8', $entry);
    }
);

【讨论】:

    【解决方案3】:

    如果是 PDO 连接,以下可能会有所帮助,但数据库应为 UTF-8:

    //Connect
    $db = new PDO(
        'mysql:host=localhost;dbname=database_name;', 'dbuser', 'dbpassword',
        array('charset'=>'utf8')
    );
    $db->query("SET CHARACTER SET utf8");
    

    【讨论】:

    • 谢谢,帮我省了一些麻烦。
    【解决方案4】:

    有一个简单的方法

    array_walk_recursive(
      $array,
      function (&$entry) {
        $entry = mb_convert_encoding(
            $entry,
            'UTF-8'
        );
      }
    );
    

    【讨论】:

    • 这里更简单、更快、更有效的解决方案!
    【解决方案5】:

    你可以这样使用:

    <?php
    array_walk_recursive(
    $array, function (&$value)
    {
     $value = htmlspecialchars(html_entity_decode($value, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
    }
    );
    ?>
    

    【讨论】:

      【解决方案6】:

      您可以将数组发送到此函数:

      function utf8_converter($array){
          array_walk_recursive($array, function(&$item, $key){
              if(!mb_detect_encoding($item, 'utf-8', true)){
                  $item = utf8_encode($item);
              }
          }); 
          return $array;
      }
      

      它对我有用。

      【讨论】:

        【解决方案7】:

        以前的答案对我不起作用:( 不过这样也没关系:)

                 $data = json_decode(
                      iconv(
                          mb_detect_encoding($data, mb_detect_order(), true),
                          'CP1252',
                          json_encode($data)
                        )
                      , true)
        

        【讨论】:

          【解决方案8】:

          您可以使用string utf8_encode( string $data ) 函数来完成您想要的。它适用于单个字符串。您可以编写自己的函数,借助 utf8_encode 函数转换数组。

          【讨论】:

          • 你检查过utf8_encode使用的输入编码吗?
          【解决方案9】:

          由于这篇文章是一个很好的SEO网站,所以我建议使用内置函数“mb_convert_variables”来解决这个问题。它使用简单的语法。

          mb_convert_variables('utf-8', 'original encode', array/object)

          【讨论】:

            【解决方案10】:

            一个更通用的数组编码函数是:

            /**
             * also for multidemensional arrays
             *
             * @param array $array
             * @param string $sourceEncoding
             * @param string $destinationEncoding
             *
             * @return array
             */
            function encodeArray(array $array, string $sourceEncoding, string $destinationEncoding = 'UTF-8'): array
            {
                if($sourceEncoding === $destinationEncoding){
                    return $array;
                }
            
                array_walk_recursive($array,
                    function(&$array) use ($sourceEncoding, $destinationEncoding) {
                        $array = mb_convert_encoding($array, $destinationEncoding, $sourceEncoding);
                    }
                );
            
                return $array;
            }
            

            【讨论】:

              【解决方案11】:

              简单的工作方式是:

              array_map(callable $callback, array $array1, array $... = ?): array

              //Example #1 Example of the function array_map()
              
              <?php
              function cube($n)
              {
                  return($n * $n * $n);
              }
              
              $a = array(1, 2, 3, 4, 5);
              $b = array_map("cube", $a);
              print_r($b);
              ?>
              

              $b 的输出是:

              Array
              (
                  [0] => 1
                  [1] => 8
                  [2] => 27
                  [3] => 64
                  [4] => 125
              )
              

              更多详情 src -> PHP: array_map - Manual

              【讨论】:

                【解决方案12】:

                您可以执行以下操作,而不是使用递归来处理可能很慢的多维数组:

                $res = json_decode(
                    json_encode(
                        iconv(
                            mb_detect_encoding($res, mb_detect_order(), true),
                            'UTF-8',
                            $res
                        )
                    ),
                    true
                );
                

                这会将任何字符集转换为 UTF8 并保留数组中的键。因此,您可以一次性完成整个结果集,而不是使用array_walk“懒惰地”转换每一行。

                【讨论】:

                • mb_detect_encoding() 期望参数 1 是字符串,$res 不是字符串。
                猜你喜欢
                • 2012-07-17
                • 2012-12-03
                • 1970-01-01
                • 1970-01-01
                • 2013-09-14
                • 2017-02-24
                • 2011-10-02
                • 1970-01-01
                • 2017-03-29
                相关资源
                最近更新 更多