【问题标题】:utf8_encode and hypens [closed]utf8_encode 和 hypens [关闭]
【发布时间】:2013-02-14 12:12:02
【问题描述】:

在我的 php 文件中:

foreach ($output[0] as $key => $value){
    $output[0][$key] = utf8_encode(strip_tags($output[0][$key]));       
}
echo (json_encode($output));

我使用 utf8 编码以避免在带有元音变音的字符妨碍时得到null,然后我发现了一个连字符,这是我得到表单输出的文本:

H\u00f6rbuch-CDs

然后在执行 json_encode 时,我得到 null。原始文本是Hörbuch-CDs,所以基本上utf8编码是有效的,但由于某种原因它跳过了连字符,我什至found代码(我认为)utf转换应该是U+002D,我不确定,因为有大量的连字符如符号,表示存在转换。

我的问题是,为什么 utf8_encoding 不是...编码?我该如何解决这个问题?我应该解析文本并手动替换每个连字符吗?

一点额外的,输出中的文本是从具有排序规则latin1_german1_ci的数据库中检索的,不知道这是否有帮助。

【问题讨论】:

  • 这可能无法解决您的问题,但您应该查看 array_map() 函数以避免使用 foreach() :php.net/manual/en/function.array-map.php
  • 连字符在 UTF-8 中是完全合法的,所以没有问题。但是你只编码$output[0]——剩下的呢?
  • @mimipc 谢谢你完全忘记了 array_map() 函数。 @Jon $output 是一个数组数组,其中包含一个数组,因此 $output[0] 我引用了其中唯一的数组,我知道这并不优雅,我只是在做一个例子来发布一个问题所以。另外,我也想过,连字符是 utf8 中的合法字符,但我认为有一个转换代码。
  • 查看完整的 json_encode 输出示例可能会很有用(因为它是回显的)
  • @niacurshi 这是 $output:["products_name"]=> H\u00f6rbuch-CDs 这是回声:"products_name":null

标签: php encoding utf-8 character-encoding json


【解决方案1】:

你试过用 iconv 代替 utf8_encode 吗?

iconv('LATIN1','UTF-8',strip_tags($output[0][$key]));

【讨论】:

  • 仍然收到null
  • utf8_encode 被记录在案就是这样做的,那么有什么意义呢?
  • 我也收到null 到带有变音符号的字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 2011-10-05
  • 2016-11-02
  • 2016-11-15
  • 2013-01-08
  • 1970-01-01
相关资源
最近更新 更多