2015-05-08 477 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變量。 (我已經在我的問題中提到過) –

相關問題