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);