Table des matières
Comprendre les règles d'échappement de JSON
)" > Pourquoi y a-t-il des barres à barres supplémentaires? ( \\ , \" )
Utilisation d'options de codage JSON dans PHP
Traitant de la saisie des utilisateurs et des caractères spéciaux
Débogage des erreurs JSON
Résumé: meilleures pratiques
Maison développement back-end tutoriel php Décoder l'évasion: manipulation des barres obliques et des caractères spéciaux en JSON avec PHP

Décoder l'évasion: manipulation des barres obliques et des caractères spéciaux en JSON avec PHP

Jul 28, 2025 am 04:41 AM
PHP Escape Characters

Pour gérer correctement les barres obliques JSON et les caractères spéciaux en PHP, vous devez comprendre le mécanisme d'échappement et utiliser des options appropriées. 1. JSON_ENCODE () échappera automatiquement à Double Quotes and Backslash. Les barreaux de barreaux supplémentaires affichées dans la sortie sont nécessaires pour le format JSON légal et reviendront à la normale après l'analyse; 2. Utilisez JSON_UNESCAPED_SLASHES pour éviter que les barres obtenues ne soient échappées, ce qui rend l'URL plus claire; 3. Utilisez JSON_UNESCAPED_UNICODE pour conserver des caractères Unicode tels que chinois et emoji au lieu de les convertir en séquences \ uxxxx; 4. Assurez-vous que l'entrée est encodée UTF-8 et définissez l'en-tête ('contenu-type: application / json; charset = utf-8'); 5. N'ajoutez pas de barres à barres manuellement, elles doivent être automatiquement gérées par json_encode (); 6. Dépannage via JSON_LAST_ERROR () Lorsqu'une erreur se produit. Les problèmes courants comprennent les chaînes non UTF-8, les références circulaires ou les types de ressources; 7. Vérifiez toujours les résultats d'analyse de la sortie JSON en JavaScript et d'autres environnements pour assurer l'exactitude. En fin de compte, vous devez faire confiance à json_encode () et optimiser la sortie en combinaison avec des bits de drapeau.

"Décoder

Lorsque vous travaillez avec JSON dans PHP, la gestion des objets et les caractères spéciaux est correctement cruelle, en particulier lors de la saisie de l'entrée, des chemins de fichier ou du contenu qui comprend des citations, des barres borlles ou des caractères de contrôle. Un point de douleur commun auxquels les développeurs sont confrontés est une évasion inattendue (comme \/ ou \\ ) dans la sortie JSON, ou des erreurs d'analyse due à des caractères non recueillis. Décomposons comment PHP gère ces cas et comment les gérer correctement.

"Décoder

Comprendre les règles d'échappement de JSON

JSON a des règles strictes sur les personnages qui doivent être échappés:

  • Double Quotes ( " ) → \"
  • Barreaux arrière ( \ ) → \\
  • Caractères de contrôle (comme newline \n , tab \t , etc.) → \n , \t , etc.
  • Forward Slash ( / ) → Facultatif: \/ (utilisé pour éviter de fermer les balises de script HTML, mais pas requises)

La fonction json_encode() de PHP échappe automatiquement aux caractères qui doivent s'échapper selon la spécification JSON. Mais cela peut parfois conduire à la confusion, surtout lorsque vous voyez des barres à barres supplémentaires.

"Décoder

Pourquoi y a-t-il des barres à barres supplémentaires? ( \\ , \" )

Si vous voyez des barres à barres doubles ou des devis échappés dans votre sortie, cela est probablement dû à l'une de ces raisons:

  • Vous affichez la chaîne PHP brute , pas la sortie JSON réelle.
  • La sortie est en cours de traitement par HTML ou JavaScript , qui peut interpréter différemment les barreaux.
  • Citations magiques (dépréciées) - pas un problème en PHP moderne, mais vaut la peine d'être exclu.

Exemple:

"Décoder
 $ data = ['path' => 'c: \\ xampp \\ htdocs', 'desc' => 'Il a dit "bonjour"'];
echo json_encode ($ data);

Sortir:

 {"Path": "C: \\\\ \ \\\ XAMPP \\\\\ HTDOCS", "DESC": "Il a dit \" Hello \ ""}

C'est JSON correct . Chaque barre oblique inverse est échappée (donc \\ devient \\\\ dans la chaîne), et les citations sont échappées avec \" .

Lorsqu'il est analysé par JavaScript ou un autre décodeur JSON, il devient:

 C: \ xAMPP \ HTDOCS
Il a dit "bonjour"

Ainsi, les barres obliques supplémentaires ne sont pas un bug - elles sont nécessaires pour JSON valide.


Utilisation d'options de codage JSON dans PHP

PHP fournit plusieurs indicateurs pour contrôler comment json_encode() se comporte:

 json_encode ($ data, json_unescaped_slashes | json_unescaped_unicode | json_unescaped_slashes);

Facieux utiles communs:

  • JSON_UNESCAPED_SLASHES - Empêche </script> -Style Escaping: / reste / , pas \/
  • JSON_UNESCAPED_UNICODE - Sorte les caractères UTF-8 directement au lieu de \uXXXX
  • JSON_HEX_QUOT - Échappe des citations comme \u0022 (rarement nécessaire)
  • JSON_PRETTY_PRINT - rend la sortie lisible avec l'indentation

Exemple:

 $ data = [&#39;url&#39; => &#39;https://example.com&#39;, &#39;message&#39; => &#39;Hi / Hello&#39;];

echo json_encode ($ data);
// {"url": "https: \ / \ / example.com", "message": "hi \ / bonjour"}

echo json_encode ($ data, json_unescaped_slashes);
// {"url": "https://example.com", "message": "salut / bonjour"}

Utilisez JSON_UNESCAPED_SLASHES si vous n'avez pas besoin de sécurité de balise de script HTML et que vous voulez des URL plus propres.


Traitant de la saisie des utilisateurs et des caractères spéciaux

Lors de l'acceptation de l'entrée utilisateur (par exemple, à partir d'un formulaire ou d'une API), désinfectez et validez toujours avant de coder vers JSON.

 $ userInput = $ _post [&#39;comment&#39;]; // pourrait contenir des citations, des nouvelles, des emojis

$ data = [
    &#39;comment&#39; => $ userInput,
    &#39;Timestamp&#39; => time ()
]]

// Cela gérera correctement les citations, les Newlines et UTF-8
echo json_encode ($ data, json_unesaped_unicode);

Sans JSON_UNESCAPED_UNICODE , les emojis ou le texte non ascii (comme é, monde) devient \u séquences. Avec le drapeau, ils restent lisibles par l'homme.

Assurez-vous également que votre script PHP utilise UTF-8:

 mb_internal_encoding (&#39;utf-8&#39;);
en-tête (&#39;contenu-type: application / json; charset = utf-8&#39;);

Débogage des erreurs JSON

Si json_encode() échoue, utilisez json_last_error() pour savoir pourquoi:

 $ json = json_encode ($ data);
if ($ json === false) {
    switch (json_last_error ()) {
        cas JSON_ERROR_UTF8:
            Echo "Erreur de codage UTF-8";
            casser;
        cas JSON_ERROR_RECURSION:
            écho "Array ou objet récursif";
            casser;
        cas JSON_ERROR_UNSUPPORTED_TYPE:
            Echo "Objet avec type non pris en charge";
            casser;
    }
}

Problèmes courants:

  • Chaînes non UTF-8 (par exemple, de utf8_decode() ou encodages hérités)
  • Références circulaires dans les objets / tableaux
  • Les ressources ou les fermetures en cours de codé (non autorisée)

Résumé: meilleures pratiques

Pour gérer les barres obliques et les caractères spéciaux en JSON avec PHP:

  • ✅ Utilisez json_encode() avec des drapeaux appropriés comme JSON_UNESCAPED_SLASHES et JSON_UNESCAPED_UNICODE
  • ✅ Assurez-vous toujours que les chaînes sont codées UTF-8
  • ✅ N'ajoutez pas manuellement les barres obliques - LET json_encode()
  • ✅ Test de décodage de la sortie en JavaScript ou un autre analyseur pour vérifier l'exactitude
  • ✅ Vérifiez les erreurs d'encodage à l'aide de json_last_error()

La clé est de comprendre que les barreaux supplémentaires que vous voyez sont souvent à quel point les personnages échappés apparaissent dans les cordes - ils résolvent correctement lorsqu'ils sont analysés.

Fondamentalement: faites confiance json_encode() , mais ajustez-le avec les bonnes options pour une sortie plus propre et utilisable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Navigation de l'enfer de barreaux arrière: une plongée profonde dans `preg_quote ()` et regex échappant Navigation de l'enfer de barreaux arrière: une plongée profonde dans `preg_quote ()` et regex échappant Jul 26, 2025 am 09:51 AM

preg_quote () EscapesRegex-SpecialCharacters, y compris BackslashesandTheDelimiter, totrareathemasliterals; 2.AvoidDouble-EscapingByPassingRawstrings (par exemple, «c: \ Path») Sanspre-escapedbackslasheshes;.

Échappez le comportement des personnages dans les syntaxes Heredoc et Nowdoc de PHP Échappez le comportement des personnages dans les syntaxes Heredoc et Nowdoc de PHP Jul 26, 2025 am 09:45 AM

Heredoc gère les séquences d'interpolation variable et d'évasion de base telles que \ n, \ t, \\, \ $, mais ne traite pas \ "ou \ ', tandis que NowDoc n'effectue pas des variables d'interpolation et de tout traitement d'évasion. Tous les contenus, y compris \ n et les variables, sont devenues littéralement; 1. Les variables telles que le nom $ seront remplacées comme indique comme indique comme des nouvelles; 3. Aucune citation d'évasion n'est requise pour les deux;

Modèles d'échappement PHP moderne pour un code sécurisé et propre Modèles d'échappement PHP moderne pour un code sécurisé et propre Jul 26, 2025 am 09:51 AM

Toujours EscapeOutputUsingContext-SpecificMethods: htmlSpecialCars () forhtmlContentAndAtTributes, rawurlencode () forurls, andjson_en code () withjson_hex_tag, json_hex_apos, json_hex_quot, etjson_unescaped_unicodeforjavascrip

Une analyse comparative: `AddsLashes ()` contre `HtmlSpecialChars ()` contre `mysqli_real_escape_string ()` Une analyse comparative: `AddsLashes ()` contre `HtmlSpecialChars ()` contre `mysqli_real_escape_string ()` Jul 27, 2025 am 04:27 AM

AddSlashes () doit être évité pour les évasions SQL car il n'est pas sûr et non protégé de l'injection SQL; htmlSpecialChars () est utilisé pour la sortie HTML pour empêcher les attaques XSS; MySQLI_REAL_ESCACE_STRING () peut être utilisé pour les échappements de chaînes dans les requêtes MySQL, mais n'est qu'une option sous-optimale lorsque les instructions de prétraitement ne peuvent pas être utilisées. 1. AddSlashes () est obsolète et dangereux et ne doit pas être utilisé pour l'évasion SQL dans les applications modernes; 2. HtmlSpecialCars () doit être utilisé lors de la sortie de l'entrée de l'utilisateur et de la sortie en HTML pour empêcher les XS; 3. Mysqli_real_escape_string (

Au-delà de `Addslashes () ': Échappement contextuel pour une défense d'injection SQL robuste Au-delà de `Addslashes () ': Échappement contextuel pour une défense d'injection SQL robuste Jul 26, 2025 am 02:55 AM

La protection contre l'injection SQL ne peut pas compter sur Addslashes () car elle ne traite pas le codage multi-octets et échappe uniquement aux caractères finis, qui est facilement contourné; Les instructions de prétraitement (telles que les requêtes paramétrées pour PDO ou MySQLI) doivent être utilisées pour séparer les données de la logique SQL pour s'assurer que l'entrée n'est pas analysée en code; Si le prétraitement ne peut pas être utilisé, les fonctions d'échappement spécifiques à la base de données (telles que Real_escape_String et définition du jeu de caractères correct), l'identifiant de la liste blanche ou de la marque de devis, le casting d'entrée entier et d'autres méthodes doivent être utilisés en fonction du contexte pour atteindre la défense hiérarchique.

L'escaper échappé: manipuler les barres de barres littérales dans les chaînes et les chemins PHP L'escaper échappé: manipuler les barres de barres littérales dans les chaînes et les chemins PHP Jul 26, 2025 am 09:35 AM

BackslashesgomissingInphpBecausetheyareTreatEdascaptectersInDouble-QuotedStrings, Sotofixthis: 1.usesingschingquotesforliteralPathsliL'c: \ Users \ John \ Documents ', 2.ordoublethebackSlashesSindoublequotesas "C: \\ use

Single vs Quotes doubles: un guide définitif pour échapper au comportement des personnages Single vs Quotes doubles: un guide définitif pour échapper au comportement des personnages Jul 28, 2025 am 04:44 AM

INBASH, SOMIQUOTESTERATALLCHARACTERSLITERALLEMENT WHILEDUBLEQUOTESALOWVARIABLE EXPANSIONANDLIMITÉE

L'art de la barre de bar: démystifier les personnages d'échappement dans les expressions régulières PHP L'art de la barre de bar: démystifier les personnages d'échappement dans les expressions régulières PHP Jul 27, 2025 am 03:18 AM

TomasterbackslashesInphpregex, Comprendre les émeutes de PARSIGNOCCUR: PhprocesseSESCACESEENCESFIRST, ThentheregexEnginedoes; 2.UsesingslequotesForregexpatternStoAvoidPhpinterpretingsapeslike \ BASBABOTSPACE; 3.Indoubleque, doubléthebackslasslashes (.

See all articles