我知道这个问题多次在这里问过。但这些解决方案对我没用。我今天非常严重地面对这个问题。
// Case 1
$str = 'Test \300'; // Single Quoted String
echo json_encode(utf8_encode($str)) // output: Test \\300
// Case 2
$str = "Test \300"; // Double Quoted String
echo json_encode(utf8_encode($str)) // output: Test \u00c0
我想要case 2的输出,我有单引号$ str变量。此变量由XML字符串解析填充。并且该XML字符串保存在txt文件中。
(这里\ 300是À(拉丁字符)字符的编码,我无法控制它。)
请不要给我解决上面的静态字符串
提前致谢
答案 0 :(得分:2)
这样做:
$string = '\300';
$string = preg_replace_callback('/\\\\\d{1,3}/', function (array $match) {
return pack('C', octdec($match[0]));
}, $string);
它匹配反斜杠的任何序列,后跟最多三个数字,并将该数字从八进制数转换为二进制字符串。其结果与"\300"
的结果相同。
请注意,对于转义转义,不的工作方式完全相同;即"\\300"
将导致文字\300
,而上述代码将转换它。
如果您想要所有,可以使用双引号字符串的可能规则,而不是手动重新实现它们,最好的办法是简单eval("return \"$string\"")
,但这也有一些警告。< / p>
答案 1 :(得分:-3)
愿你正在寻找这个
$str = 'Test \300'; // Single Quoted String
echo json_encode(stripslashes($str)); // output: Test \\300