我有一个从数据库中获取的ISO字符串,当我utf8_encode它时,我得到一个\ u00f6而不是Ö.这混淆了这个PHP脚本的javascript/html.为什么有一个\ u00f6而不是Ö?如何获得Ö而不是?
编辑:好的,我做了一些实验,结果发现这是由utf8_encode和json_encode的组合引起的.虽然如果我根本没有utf8_encode,json中的值将为null.
json_encode(array("city"=>utf8_encode("göteborg")))
Run Code Online (Sandbox Code Playgroud)
utf8_encode不会对字符进行编码\uxxxx,因为你发现自己json_encode正在这样做.这没关系,因为JSON格式指定了这种行为.如果您的客户端正确地将JSON字符串解码为Javascript数据类型,则\uxxxx转义将转换为正确的Unicode字符.
至于json_encode丢弃字符,如果您的字符串是Latin1编码:它没有在手册页上明确说明,但Javascript和JSON完全基于Unicode,所以我怀疑Latin1是一个无效和意外的编码与JSON字符串一起使用,所以它打破了.