【发布时间】: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