2015-05-08 16 views
6

So che questa domanda è stata posta qui molte volte. Ma queste soluzioni non mi sono utili. Oggi sto affrontando molto male questo problema.Conversione da PHP a doppia stringa quotata a stringa singola quotata

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

Voglio l'output del caso 2 e ho una variabile $ str singola quotata. Questa variabile è riempita dall'analisi della stringa XML. E quella stringa XML viene salvata nel file txt.

(Qui \ 300 è codifica di un (latino) carattere Charactor e non riesco a controllarlo.)

Si prega di non darmi soluzione di cui sopra stringa statica

Grazie in anticipo

risposta

2

questo farà:

$string = '\300'; 

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

Corrisponde a qualsiasi sequenza di una barra rovesciata seguita da un massimo di tre numeri e converte tale numero da un numero ottale in una stringa binaria. Che ha lo stesso risultato di ciò che fa "\300".

Si noti che questo non lavoro esattamente lo stesso per fughe sfuggito; Ad esempio, "\\300" genererà un valore letterale \300 mentre il codice precedente lo convertirà.

Se vuoi tutte le possibili regole di corde doppie citati seguita senza reimplementare a mano, la soluzione migliore è quella di semplicemente eval("return \"$string\""), ma che ha una serie di avvertimenti troppo.

+0

Grazie mille !! Sei un maestro !! La tua prima soluzione funziona per me, ma eval ("return \" $ string \ "") non funziona per me. Grazie ancora –

-3

Che Siete alla ricerca di questo

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

Voglio output del caso 2 ma ho una stringa singola quotata (come nel caso 1) nella variabile $ str. (Già ho citato nella mia domanda) –

Problemi correlati