هل يمكن لأي شخص أن يشرح كود PHP هذا باستخدام json_encode وjson_decode؟
سؤال
$a = '{ "tag": "<b></b>" }';
echo json_encode( json_decode($a) );
هذه المخرجات:
{"tag":"<b><\/b>"}
عندما تعتقد أنه سيخرج المدخلات بالضبط.لسبب ما يضيف json_encode شرطة مائلة إضافية.
المحلول
لأنه جزء من معيار JSON
شار
any-Unicode-character- except-"-or-\-or- control-character \" \\ \/ <---- see here? \b \f \n \r \t \u four-hex-digits
نصائح أخرى
استخدم هذا:
echo json_encode($a,JSON_HEX_TAG)
ستكون النتيجة:
["\u003C\u003E"]
يمكنك قراءة هذه المقالة لتحسين معرفتك بـ JSON_ENCODEhttp://php.net/manual/en/function.json-encode.php
ربما تكون هذه ميزة أمنية.النسخة الهاربة (على سبيل المثال.الناتج) سيتم تحليله على أنه مشابه للإصدار الذي لم يتم الهروب منه، بواسطة Javascript (على سبيل المثال. \/
يصبح /
).بعد الهروب من الشرطة المائلة بهذه الطريقة، هناك فرصة أقل لأن يسيء المتصفح تفسير سلسلة جافا سكريبت على أنها HTML.بالطبع، إذا تعاملت مع البيانات بشكل صحيح، فلن تكون هناك حاجة لذلك، لذا فهو بمثابة ضمان ضد مبرمج جاهل يفسد الأمور بنفسه.
إدخالك ليس JSON صالحًا، لكن محلل JSON الخاص بـ PHP (مثل معظم محللي JSON) سيقوم بتحليله على أي حال.