我有一个刮刀正在从别处收集一些我无法控制的数据。源数据执行各种有趣的Unicode字符,但它将它们转换为非常无用的格式,所以
\u00e4
对于带有变音符号的小'a'(没有我认为应该在那里的双引号)*。当然这会在我的HTML中呈现为纯文本。
是否有任何现实的方法将unicode源转换为适当的字符,不涉及我手动处理每个字符串序列并在刮擦期间替换它们?
*这里是它吐出的json样本:
({"content":{"pagelet_tab_content":"<div class=\"post_user\">Latest post by <span>D\u00e4vid<\/span><\/div>\n})
答案 0 :(得分:6)
考虑到\ u00e4是Unicode字符的Javascript表示,可能是使用json_decode()
PHP函数将其解码为PHP字符串......
有效的JSON字符串为:
$json = '"\u00e4"';
而且:
header('Content-type: text/html; charset=UTF-8');
$php = json_decode($json);
var_dump($php);
会给你正确的输出:
string 'ä' (length=2)
(这是一个字符,但长度为两个字节)
不过,感觉有点hackish ^^
它可能效果不好,取决于你输入的字符串类型......
[编辑] 我刚刚看到您的评论,您似乎表示您将JSON作为输入?如果是这样,json_decode()
可能真的是适合这项工作的工具; - )
答案 1 :(得分:3)
如果您尝试在页面执行之间的某个位置使用JSON编码(例如,作为某些CMS的插件)或无法设置标题信息,则接受的答案将不起作用。但是,当然,页面标题应该始终正确设置。
您可以使用附加参数提供json_encode / json_decode函数以“强制”使用utf-8。我正在为此构建一个简单的类,并使用静态方法来获取结果。
关键是Flag JSON_UNESCAPED_UNICODE 。 像这样使用它:
/*
Data Class
* * * * * * *
Encode and Decode Your String / Object / Array with utf-8 force.
*/
class Data {
// Encode
// @param $a Array Element to decode in JSON
public static function encode($a=[]){
$json = json_encode($a, JSON_UNESCAPED_UNICODE);
return $json;
}
// Decode
// @param $a JSON String
// @param $t Type of return (false = Array, true = Object)
public static function decode($a='', $t=false){
$obj = json_decode($a, $t, 512, JSON_UNESCAPED_UNICODE);
return $obj;
}
}
// Get your JSON String
$some_json_string = file_get_contents(YOUR_URL);
// Decode as wish
$json_as_array = Data::decode($some_json_string);
$json_as_object = Data::decode($some_json_string, true);
// Debug / use your Content
echo "<pre>";
print_r($json_as_array);
print_r($json_as_object);
echo "</pre>";