


Décoder l'évasion: manipulation des barres obliques et des caractères spéciaux en JSON avec PHP
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.
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.

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.

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:

$ 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 = ['url' => 'https://example.com', 'message' => 'Hi / Hello']; 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 ['comment']; // pourrait contenir des citations, des nouvelles, des emojis $ data = [ 'comment' => $ userInput, 'Timestamp' => 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 ('utf-8'); en-tête ('contenu-type: application / json; charset = utf-8');
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 commeJSON_UNESCAPED_SLASHES
etJSON_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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

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

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;

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

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 (

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.

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

INBASH, SOMIQUOTESTERATALLCHARACTERSLITERALLEMENT WHILEDUBLEQUOTESALOWVARIABLE EXPANSIONANDLIMITÉE

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