2015-05-08 15 views
6

Tôi biết câu hỏi này được yêu cầu ở đây nhiều lần. Nhưng các giải pháp đó không hữu ích cho tôi. Tôi đang đối mặt với vấn đề này rất tệ ngày nay.PHP chuyển đổi chuỗi trích dẫn kép thành chuỗi trích dẫn đơn

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

Tôi muốn đầu ra của trường hợp 2 và tôi có biến $ str duy nhất được trích dẫn. Biến này được điền từ phân tích chuỗi XML. Và chuỗi XML đó được lưu trong tệp txt.

(Ở đây \ 300 là mã hóa của một (Latin charactor) nhân vật và tôi không thể kiểm soát nó.)

Please Do not cho tôi giải pháp cho trên chuỗi tĩnh

Cảm ơn trước

Trả lời

2

này sẽ thực hiện:

$string = '\300'; 

$string = preg_replace_callback('/\\\\\d{1,3}/', function (array $match) { 
    return pack('C', octdec($match[0])); 
}, $string); 

Nó khớp với bất kỳ chuỗi dấu gạch chéo ngược nào theo sau lên tới ba số và chuyển đổi số đó từ số bát phân sang chuỗi nhị phân. Trong đó có kết quả tương tự như những gì "\300" thực hiện.

Lưu ý rằng điều này sẽ không hoạt động chính xác cho thoát thoát; tức là "\\300" sẽ dẫn đến một chữ số \300 bằng chữ trong khi mã ở trên sẽ chuyển đổi.

Nếu bạn muốn tất cả quy tắc có thể có của chuỗi được trích dẫn kép mà không cần thực hiện lại chúng bằng tay, đặt cược tốt nhất của bạn chỉ đơn giản là eval("return \"$string\""), nhưng điều đó cũng có một số cảnh báo.

+0

Cảm ơn bạn rất nhiều !! Bạn là bậc thầy !! Giải pháp đầu tiên của bạn làm việc cho tôi, Nhưng eval ("return \" $ string \ "") không hoạt động đối với tôi. Một lần nữa xin cảm ơn –

-3

có thể Bạn đang tìm kiếm này

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

Tôi muốn đầu ra của trường hợp 2 nhưng tôi có chuỗi trích dẫn đơn (như trong trường hợp 1) trong biến $ str. (Tôi đã đề cập trong câu hỏi của tôi) –

Các vấn đề liên quan