Php utf8_编码和hypens

Php utf8_编码和hypens,php,encoding,utf-8,character-encoding,json,Php,Encoding,Utf 8,Character Encoding,Json,在我的php文件中: foreach ($output[0] as $key => $value){ $output[0][$key] = utf8_encode(strip_tags($output[0][$key])); } echo (json_encode($output)); 我用utf8编码,以避免当一个带有umlaut的字符挡住去路时得到null,然后我发现一个连字符,这是我得到的表单输出文本: H\u00f6rbuch-CDs 然后在执行json_

在我的php文件中:

foreach ($output[0] as $key => $value){
    $output[0][$key] = utf8_encode(strip_tags($output[0][$key]));       
}
echo (json_encode($output));
我用utf8编码,以避免当一个带有umlaut的字符挡住去路时得到
null
,然后我发现一个连字符,这是我得到的表单输出文本:

H\u00f6rbuch-CDs
然后在执行json_编码时,我得到
null
。原始文本是
Hörbuch CD
,因此基本上utf8编码是有效的,但出于某种原因,它跳过了连字符,我甚至(我认为)utf转换的代码应该是
U+002D
,我不确定,因为有大量类似连字符的符号,这意味着转换存在

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


另外,输出中的文本是从具有排序规则的数据库中检索的,我不知道这会有帮助。

您是否尝试过使用iconv而不是utf8编码

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

这可能无法解决您的问题,但您应该查看array_map()函数以避免使用foreach():连字符在UTF-8中完全合法,因此没有问题。但是您只编码了
$output[0]
——剩下的怎么办?@mimipc谢谢您完全忘记了array\u map()的函数@Jon$output是一个数组数组,其中只有一个数组,因此使用$output[0]我引用了其中唯一的数组,我知道它并不优雅,我只是举了个例子来提出一个问题。另外,我也考虑过,连字符在utf8中是合法的,但我认为有一个转换代码。看看完整的json编码输出的示例(因为它是echo'd)@niaccurshi这是$output:
[“products\u name”]=>H\u00f6rbuch CD
,这是echo:
“products\u name”:null
仍然获得
null
utf8\u encode
就是为了做到这一点,那么这有什么意义呢?我还获得了带有umlaut的字符的
null