2015-05-08 14 views
6

Bu soruyu burada defalarca biliyorum. Ancak bu çözümler benim için kullanışlı değil. Bu problemle bugün çok kötü karşı karşıya geliyorum.PHP çift tırnaklı dizgeyi tek tırnaklı dizgeye dönüştürüyor

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

Durum 2'nin çıktısını istiyorum ve tek tırnaklı $ str değişkenim var. Bu değişken XML dizgisi ayrıştırmadan doldurulur. Ve bu XML dizesi txt dosyasına kaydedilir.

peşin

statik dize yukarıda

teşekkür için bana çözümü vermeyin lütfen (Burada 300 \ a (latince Charactor) karakteri ve bunu kontrol edemez. Ait kodlama)

cevap

2

aradığınız Mayıs Bu yapacağım:

$string = '\300'; 

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

Herhangi bir ters eğik çizgi ile eşleşir ve ardından üç adede kadar sayıya karşılık gelir ve bu sayıyı sekizli sayıdan ikili dizeye dönüştürür. Hangi "\300" yaptığı gibi aynı sonuca sahiptir. için bu irade eser tam olarak aynı değildir kaçar kaçtığını

Not; Yani, "\\300", yukarıdaki kod bunu dönüştürürken, bir \300 kelimesiyle sonuçlanacaktır. Eğer tüm istiyorsanız

çift tırnaklı dizeleri olası kurallar onları eliyle reimplementing olmadan takip en iyi bahis sadece eval("return \"$string\"") için, ama bu çok uyarılar bir numarası vardır.

+0

Çok teşekkürler! Sen ustasın! İlk çözümünüz benim için çalışıyor, Ama eval ("return \" $ string \ "") benim için çalışmıyor. Tekrar teşekkürler –

-3

Bu

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

Durum 2'nin çıktısını almak istiyorum ancak $ str değişkeninde tek tırnaklı dizem var (1 durumunda olduğu gibi). (Zaten benim soruma değindim) –

İlgili konular