simples magicas magic_quotes_gpc magic dobles comillas php json

magicas - magic quotes php



¿Existe una función de PHP que solo agregue barras oblicuas a comillas dobles NO a comillas simples? (4)

¿Existe una función de PHP que solo agregue barras oblicuas a comillas dobles NO a comillas simples?

No hay una función como el addslashes() que solo agrega una barra inclinada a comillas dobles.

Sin embargo, puede utilizar addcslashes para agregar solo barras diagonales a caracteres específicos, por ejemplo, solo para comillas dobles:

addcslashes($string, ''"'');

Eso hace exactamente lo que se describe. Sin embargo, si desea que sea compatible con stripcslashes() , debe agregar la propia barra oblicua a la lista de caracteres:

addcslashes($string, ''"//');

Eso debería hacer el trabajo que has estado pidiendo. No tengo idea de si eso es compatible con la codificación json.

Estoy generando JSON con PHP.

he estado usando

$string = ''This string has "double quotes"''; echo addslashes($string);

salidas: This string has /" double quotes/"

JSON perfectamente válido

Desafortunadamente, Addlashes también escapa de comillas simples con resultados catastróficos para JSON válido

$string = "This string has ''single quotes''"; echo addslashes($string);

salidas: This string has /'single quotes/'

En resumen, ¿hay una manera de escapar de comillas dobles?


Aunque debería usar json_encode si está disponible para usted, también puede usar addcslashes para agregar / solo a ciertos caracteres como:

addcslashes($str, ''"///'')

También puede utilizar un reemplazo basado en expresiones regulares:

function json_string_encode($str) { $callback = function($match) { if ($match[0] === ''//') { return $match[0]; } else { $printable = array(''"'' => ''"'', ''//' => ''//', "/b" => ''b'', "/f" => ''f'', "/n" => ''n'', "/r" => ''r'', "/t" => ''t''); return isset($printable[$match[0]]) ? ''//'.$printable[$match[0]] : ''//u''.strtoupper(current(unpack(''H*'', mb_convert_encoding($match[0], ''UCS-2BE'', ''UTF-8'')))); } }; return ''"'' . preg_replace_callback(''///.|[^/x{20}-/x{21}/x{23}-/x{5B}/x{5D}-/x{10FFFF}/u'', $callback, $str) . ''"''; }


Si está generando JSON, ¿por qué no usar la función json_encode() ?


function json_string_encode( $str ) { $from = array(''"''); // Array of values to replace $to = array(''//"''); // Array of values to replace with // Replace the string passed return str_replace( $from, $to, $str ); }

Para usar la función simplemente necesitas usar

$text = json_string_encode($text);