2015-05-08 264 views
6

我知道这个问题在这里问了很多次。但是这个解决方案对我没有用。我今天非常严重地面对这个问题。PHP将双引号字符串转换为单引号字符串

// 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 

我想要案例2的输出,我有单引号$ str变量。这个变量是从XML字符串解析中填充的。并且该XML字符串保存在txt文件中。

(这里\ 300是(拉丁文的人物造型)字符,我无法控制它。编码)

请不要给我的解决方案上面的静态字符串

在此先感谢

回答

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\""),但有一些需要注意的地方了。

+0

非常感谢!你是主人!你的第一个解决方案为我工作,但eval(“return \”$ string \“”)不适合我。再次感谢 –

-3

也许您正在寻找此

$str = 'Test \300'; // Single Quoted String 
echo json_encode(stripslashes($str)); // output: Test \\300 
+0

我想要案件2的输出,但我有单引号字符串(如情况1)在$ str变量。 (我已经在我的问题中提到过) –

相关问题