json_encode () এগিয়ে স্ল্যাশ এড়ানো


164

আমি ইনস্টাগ্রাম থেকে জেএসএন টানছি:

$instagrams = json_decode($response)->data;

তারপরে ডেটা পুনর্গঠন করতে পিএইচপি অ্যারেতে ভেরিয়েবলগুলি পার্স করে, তারপরে ফাইলটিকে পুনরায় এনকোডিং এবং ক্যাশে করা:

file_put_contents($cache,json_encode($results));

আমি যখন ক্যাশে ফাইলটি খুলি তখন আমার সমস্ত ফরোয়ার্ড স্ল্যাশ "/" এড়ানো যায়:

http:\/\/distilleryimage4.instagram.com\/410e7...

আমি আমার অনুসন্ধানগুলি থেকে সংগ্রহ করি যা json_encode()স্বয়ংক্রিয়ভাবে এটি হয় ... এটি অক্ষম করার কোনও উপায় আছে?


2
এটি alচ্ছিক: "যে অক্ষরগুলি এড়াতে হবে: উদ্ধৃতি চিহ্ন, বিপরীত শক্তিশালী, এবং নিয়ন্ত্রণের অক্ষরগুলি (U + 0000 U + 001F এর মাধ্যমে)। যে কোনও অক্ষর পালাতে পারে।"
চোরমাস্টার

উত্তর:


284

এটি নিষ্ক্রিয় করার কোন উপায় আছে?

হ্যাঁ, আপনাকে কেবল JSON_UNESCAPED_SLASHESপতাকাটি ব্যবহার করতে হবে ।

এর আগে গুরুত্বপূর্ণ পড়ুন: https://stackoverflow.com/a/10210367/367456 (আপনি কী নিয়ে কাজ করছেন তা জানুন - আপনার শত্রুকে জানুন)

json_encode($str, JSON_UNESCAPED_SLASHES);

যদি আপনার কাছে পিএইচপি 5.4 না থাকে তবে বিদ্যমান বিদ্যমান ফাংশনগুলির মধ্যে একটি বেছে নিন এবং সেগুলি আপনার প্রয়োজনগুলিতে সংশোধন করুন, যেমন http://snippets.dzone.com/posts/show/7487 (সংরক্ষণাগার অনুলিপি)

উদাহরণ ডেমো

<?php
/*
 * Escaping the reverse-solidus character ("/", slash) is optional in JSON.
 *
 * This can be controlled with the JSON_UNESCAPED_SLASHES flag constant in PHP.
 *
 * @link http://stackoverflow.com/a/10210433/367456
 */    

$url = 'http://www.example.com/';

echo json_encode($url), "\n";

echo json_encode($url, JSON_UNESCAPED_SLASHES), "\n";

উদাহরণ আউটপুট:

"http:\/\/www.example.com\/"
"http://www.example.com/"

2
এই উত্তরটি কৃত্রিম তবে JSON এনকোডকে স্ট্যান্ডার্ড হিসাবে আপনার এটিকে পালানো হিসাবে ছেড়ে দেওয়া উচিত এবং তারপরে পুনরুদ্ধারের শেষের দিকে প্রস্থানকারী পিএইচপি এর strip_slashesএবং জেএস পিএইচপিজেএস.আর
ফাংশনস /

1
@ মার্টিন বার্কার: এটি কেবল পিএইচপি 5.2.1: 3v4l.org/0AahO- এ সমস্যা হতে পারে - JSON উভয় ক্ষেত্রেই বৈধ।
hakre

@ মার্টিন বার্কার কিছু অদ্ভুত কারণে ফরোয়ার্ড স্ল্যাশ স্ট্র্যাপস্ল্যাশস (), টিআর_রেপ্লেস () বা প্রেগ_রেপ্লেস () সহ প্রাপ্তির শেষটি ছাড়ছিল না। আমি এই উত্তরটি খুঁজে পাওয়ার আগে, আমি ইউলেনকোড () ব্যবহার করে এবং তারপর% 2F প্রতিস্থাপন করে স্ল্যাশ থেকে মুক্তি পাওয়ার জন্য একসাথে একটি উপায় হ্যাক করেছি। আমি উইন্ডোজে পিএইচপি 7 ব্যবহার করছি। কোনও বাগ রয়েছে কিনা তা নিশ্চিত নন, তবে যাদুবিদ্যার উদ্ধৃতিগুলি পিএইচপি 7-তে অন্তর্ভুক্ত নেই তাই কেবল স্ল্যাশগুলি অক্ষম করে হ্যাকারি এড়ানো ভাল।
সামি ফুয়াদ

@SamiFouad: এমনকি সঙ্গে slashed, এটা সঠিক তাদেরকে JSON নেই এবং আমরা কোন সমস্যার তৈরি করা উচিত (যদি না রিসিভার তাদেরকে JSON সঠিকভাবে হ্যান্ডলিং করা হয় না, দেখতে json.org , বিশেষ করে গৃহস্থালির কাজ ডান দিকে বিবরণ যা স্পষ্টভাবে নাম \/জন্য বৈধ পালাবার ক্রম হিসাবে /) , স্ট্যাকওভারফ্লো . com/a/10210367/367456 পাশাপাশি দেখুন।
হ্যাক্রে

কুশল পিএইচপি! JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHESডিফল্ট হতে হবে, না (অদ্ভুত) বিকল্প ... কিভাবে এটি পিএইচপি-ডেভেলপারদের কথা বলে কে?
পিটার ক্রাউস

45

হ্যাঁ , তবে তা করবেন না - এগিয়ে থাকা স্ল্যাশ থেকে বাঁচা ভাল জিনিস । JSON <script>ট্যাগগুলির অভ্যন্তরে ট্যাগগুলি ব্যবহার করার সময় এটি যে </script>কোনও জায়গায় যেমন একটি স্ট্রিংয়ের অভ্যন্তরেও প্রয়োজনীয় - স্ক্রিপ্ট ট্যাগটি শেষ হবে।

JSON কোথায় ব্যবহৃত হয় তার উপর নির্ভর করে এটি প্রয়োজনীয় নয়, তবে এটি নিরাপদে উপেক্ষা করা যেতে পারে।


5
সুতরাং জাভাস্ক্রিপ্টটি যখন জসনটিতে টান দেবে তখন স্বয়ংক্রিয়ভাবে ব্যাকস্ল্যাশগুলি সরিয়ে ফেলবে, বা এটি আমার নির্দিষ্ট করার দরকার?
মাইকেল সি

5
এটি স্বয়ংক্রিয়ভাবে এটি পরিচালনা করবে। অন্যান্য অনেক ভাষার মতো, ভাষার কোনও বিশেষ অর্থ ছাড়াই অক্ষরগুলি পালিয়ে যাওয়া কেবল সেই অক্ষরগুলিকেই একা ফেলে দেয়।
চোরমাস্টার

19
@MichaelC। জেএসএন-এ স্ট্রিংয়ের মানটি স্ট্রিংয়ের মানের "\/"সমান হয় "/"- এবং একটি কার্যকরী জেএসওন পার্সার এটির মতো ব্যবহার করবে। একই নিয়ম জাভাস্ক্রিপ্ট স্ট্রিংয়ের ক্ষেত্রে প্রযোজ্য, সুতরাং জাভাস্ক্রিপ্ট কোড হিসাবে জেএসএনকে খাওয়ানোতে কোনও সমস্যা হয় না। আমি অবাক হই পিএইচপি এমনকি JSON_UNESCAPED_SLASHESপতাকা আছে।
ইসাইলিজা

4
তবে কেউ যদি JSON এ ডেটা এনকোডিং করে এবং তারপর সেগুলি একটি ডেটাবেস কলামে সংরক্ষণ করে? প্রোগ্রামে ডাটাবেসের স্বার্থে চরিত্রগুলি থেকে বাঁচার জন্য যদি কিছু ব্যবস্থা থাকে তবে স্ল্যাশগুলি ডাবল-পলায়ন হওয়ার পরে কি এই বৈশিষ্ট্যটি খুব অসুবিধে হবে না?
জাভেয়ের_এক্স

5
JSON বাস্তবায়ন কমিয়ে দিচ্ছে এই ধারণা নিয়ে কোনও এনকোডিং পদক্ষেপ ছাড়াই JSON কে স্ক্রিপ্ট ট্যাগগুলিতে ফেলে দেওয়া এমন একটি অনুশীলনের মতো মনে হয় যা অবশেষে আপনাকে কামড়ায়।
রায়ান

3

ফ্লিপ দিকে, আমি পিএইচপিইউএনআইটি-র সাথে জার্সন এনকোডড ইউআরএল সমেত বা তার সমতুল্য জরুরী ছিল বলে একটি সমস্যা ছিল having

আমার প্রত্যাশিত:

http://localhost/api/v1/admin/logs/testLog.log

এটিকে এনকোড করা হবে:

http:\/\/localhost\/api\/v1\/admin\/logs\/testLog.log

আপনার যদি তুলনা করার দরকার হয় তবে ইউআরএলটি ব্যবহার করে রুপান্তর করে:

addcslashes($url, '/')

আমার তুলনার সময় সঠিক আউটপুট জন্য অনুমোদিত।


0

আমি যেমন একটি পরিস্থিতি সম্মুখীন ছিল, এবং সহজভাবে

str_replace("\/","/",$variable)

আমার জন্য কাজ করে।


-1

আপনার এগিয়ে স্ল্যাশ পালানোর প্রয়োজন নেই! এইচটিএমএল 5 এবং জেএস 'উদ্ধৃতি চিহ্নের পাশাপাশি "উদ্ধৃতি চিহ্ন ব্যবহার করতে দেয় allows সুতরাং JSON এ আমি টাইপ করুন:

    "index4":{"<a href='http://example.com'>example</a>"}

কার্যকারিতা উদাহরণ হিসাবে ওয়েবসাইট ev.bingo দেখুন: "ভি 4": ["অডি ই-ট্রোন কিউ 4 স্পোর্টব্যাক এমইপিপি মডুলার বৈদ্যুতিক প্রপ্লেশন প্ল্যাটফর্মটি পুরোপুরি ব্যবহার করেছে, যা ভক্সওয়াগেন গ্রুপের মধ্যে ভাগ করা হয়েছে"],

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.