【发布时间】:2022-01-20 17:48:19
【问题描述】:
我正在尝试使用 utf8_encode 来显示一些重音字符(为了将它们放入 json 中),但由于某种原因它似乎失败了,我不明白为什么。这是我通过 php 测试仪运行的测试数据:
$data = '{"14446":"discreci\u00f3n","14450":"prudencia","14461":"experiencia","14491":"vida"}';
$data = preg_replace('|u00([A-Fa-f0-9][A-Fa-f0-9])|', 'x{$1}', $data);
echo $data;
echo "\r\n\r\n";
$data = preg_replace('/"\d*":/','',$data);
echo $data;
echo "\r\n\r\n";
$data = preg_replace('/[{}"?!]/','',$data);
echo $data;
echo "\r\n\r\n";
$data_array = explode(",", $data);
foreach ($data_array as $data) {
echo $data;
echo "\r\n\r\n";
}
echo utf8_encode($data_array[0]);
echo "\r\n\r\n";
echo utf8_encode("discreci\xf3n");
哪个输出:
{"14446":"discreci\x{f3}n","14450":"prudencia","14461":"experiencia","14491":"vida"}
{"discreci\x{f3}n","prudencia","experiencia","vida"}
discreci\xf3n,prudencia,experiencia,vida
离散\xf3n
审慎
经验
维达
离散\xf3n
谨慎
如你所见,如果我直接输入它,它会转换它,但如果它作为变量接收它,它不会转换它,即使它被引号包围,例如:
foreach ($data_array as $data) {
$data = '"' . $data . '"';
echo $data;
echo "\r\n\r\n";
}
也不转换它。
那么 - 我做错了什么?
【问题讨论】:
-
原始字符串似乎已经是有效的 JSON:3v4l.org/DomZc。我不清楚你为什么需要 RegEx?
-
执行简单的
json_decode($data)将显示重音字符。 JSON 支持\u00f3语法,因此如果您要使用正则表达式将其转换为重音字符,然后使用json_encode,它会将其转换回\u00f3。 -
@ChrisHaas,数字字符串无关紧要,我还需要处理其他数据
-
@user8539669,我仍然不清楚你的问题。在这个站点上的几乎所有情况下,当有人使用文本编码功能做某事时,他们都在做一些困难且通常是错误的事情。我不是说你做错了,要清楚,这只是我的第一个直觉,因为我不完全理解这个问题。您已经发布了示例输入,您能否发布您期望的示例输出以帮助我们更好地理解?
-
@ChrisHaas Jasen 在下面的建议对其进行了整理,但我最终需要列出一个词对列表([[fuerza, vida], [fuerza, discreción], [fuerza, prudencia]])我可以跳入不同的程序