【问题标题】:encode json array from latin1从 latin1 编码 json 数组
【发布时间】:2015-08-18 15:25:54
【问题描述】:

所以我对 php 很陌生,我的数组有问题。

“基本上我有一个包含 5 个字段的数组。 现在数据部分是 latin1-german。但这让 php 输出“null”。如何解码数组,使 php 返回正确的文本?"

编辑: 所以我改变了代码(JSON_PRETTY_PRINT 让它什么都不返回)。 但问题仍然存在。像“ä”和“ü”这样的特殊字符仍然使它返回“:null”。

// get all products from products table
$result = mysql_query("SELECT *FROM silberhell_app") or die(mysql_error());

// check for empty result
if (mysql_num_rows($result) > 0) {
// looping through all results
// products node
$response["products"] = array();

while ($row = mysql_fetch_array($result)) {
    // temp user array
    $product = array();
    $product["pid"] = $row["pid"];
    $product["name"] = $row["name"];
    $product["kategorie"] = $row["kategorie"];
    $product["beschreibung"] = $row["beschreibung"];
$product["bild"] = $row["bild"];
    $product["preis"] = $row["preis"];

array_map($product, "utf8_encode"); // encode array values
$products[] = $product; // insert product into array
}
$data = array(
//'success'   => 1,
'products' => $products
);
}
echo json_encode($data); // make it slightly more readable
?>

【问题讨论】:

  • array_map(utf8_encode, %arr)?非法语法 - 这是 PHP,不是 perl
  • 诶,这是一个函数体吗?为什么在所有东西中间都有一个return语句?
  • 还有一个else语句,但是我看不到if?
  • 只是对while循环的评论。不需要创建与 $row 数组相同的新 $product 数组。你可以直接在 $row 数组上做 array_map。

标签: php arrays json latin1


【解决方案1】:

稍微清理一下,现在应该可以工作了:

$products = array();
while ($row = mysql_fetch_array($result)) {
    $product = array();
    $product["pid"] = $row["pid"];
    [...]

    array_map("utf8_encode", $product); // encode array values
    $products[] = $product; // insert product into array
}

$data = array(
    'success'   => 1,
    'products' => $products
);

echo json_encode($data, JSON_PRETTY_PRINT); // make it slightly more readable

【讨论】:

  • 非常感谢您的帮助,遗憾的是 .php 文件目前没有输出任何内容,有什么我想删除的吗?我已经更新了上面的代码。非常抱歉,这是我第一次使用php。
  • 我以为您已将其封装在方法或函数中,因为您在代码中使用了 return 语句:] 我更新了答案并修复了 array_walk 调用
  • 非常感谢您迄今为止的帮助!它现在返回值,但特殊字符仍返回“:null”。我已将上面的代码更新为当前状态。还删除了“成功”依赖项。
  • 你可以试试这个:$products[] = array_map(function ($string) { return mb_convert_encoding($string, 'Windows-1252', 'utf-8'); }, $product); 另外,你不应该真正使用 mysql_* 函数,因为它们是 deprecated
  • 这非常有效!非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 2023-03-12
  • 2020-09-15
相关资源
最近更新 更多