2015-05-08 11 views
6

Znam to pytanie zadawane tutaj wiele razy. Ale takie rozwiązania nie są dla mnie przydatne. Dzisiaj bardzo borykam się z tym problemem.PHP przekonwertować podwójny cudzysłów na pojedynczy cytowany ciąg

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

Chcę, aby wynik 2 sprawy i mam jedną kwotowaną zmienną $ str. Ta zmienna jest wypełniana z parsowania łańcuchów XML. I ten ciąg XML jest zapisywany w pliku txt.

(Tutaj \ 300 jest kodowanie A (latin) charakter charactor i nie mogę go kontrolować.)

Proszę nie dawać mi rozwiązanie dla powyższych ciąg statyczny

Dzięki z góry

Odpowiedz

2

będzie to zrobić:

$string = '\300'; 

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

Pasuje do dowolnej sekwencji odwrotnego ukośnika, a następnie do trzech liczb i konwertuje tę liczbę z liczby ósemkowej na ciąg binarny. Który ma taki sam rezultat, jak to, co robi "\300".

Należy zauważyć, że będzie to nie działa dokładnie tak samo dla escaped escapes; tj. "\\300" spowoduje literalną wartość \300, podczas gdy powyższy kod ją przekonwertuje.

Jeśli chcesz wszystkie ewentualne zasady podwójnymi cudzysłowami następuje bez reimplementing je ręcznie, najlepiej jest po prostu eval("return \"$string\""), ale ma szereg zastrzeżeń zbyt.

+0

Dziękuję bardzo! Jesteś mistrzem !! Twoje pierwsze rozwiązanie działa dla mnie, ale eval ("return \" $ string \ "") nie działa dla mnie. Jeszcze raz dziękuję –

-3

Może szukasz tego

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

Chcę wyjściowe przypadku 2, ale mam jedno cudzysłowy ciąg (jak w przypadku 1) w zmiennej $ str. (Już wspomniałem w moim pytaniu) –

Powiązane problemy