Der Grund dafür "entgeht" mir.
JSON entgeht dem Schrägstrich, sodass ein Hash {a: "a/b/c"}
als {"a":"a\/b\/c"}
statt serialisiert wird {"a":"a/b/c"}
.
Warum?
javascript
json
Jason S.
quelle
quelle
json_encode()
entgeht standardmäßig Schrägstrichen, hat aber dieJSON_UNESCAPED_SLASHES
Option ab PHP 5.4.0 (März 2012)'</'
echo str_replace('</', '<\/', json_encode($obj, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
Antworten:
JSON verlangt dies nicht von Ihnen, es ermöglicht Ihnen dies. Sie können auch "\ u0061" für "A" verwenden, dies ist jedoch nicht erforderlich. Das Zulassen
\/
hilft beim Einbetten von JSON in ein<script>
Tag, das keine</
inneren Zeichenfolgen zulässt , wie Seb betont.Einige der ASP.NET Ajax / JSON-APIs von Microsoft verwenden diese Lücke, um zusätzliche Informationen hinzuzufügen, z. B. wird eine Datums- und Uhrzeitangabe als gesendet
"\/Date(milliseconds)\/"
. (Yuck)quelle
/
ist nicht erforderlich , es ist erlaubt , die Verwendung von JSON zu erleichtern. Wenn du nicht entkommen willst/
, dann nicht.Die JSON-Spezifikation besagt, dass Sie einem Schrägstrich entkommen können, dies aber nicht müssen.
quelle
Ich habe die gleiche Frage vor einiger Zeit gestellt und musste sie selbst beantworten. Folgendes habe ich mir ausgedacht:
quelle
PHP entgeht standardmäßig Schrägstrichen, weshalb dies wahrscheinlich so häufig vorkommt. Ich bin mir nicht sicher warum, aber möglicherweise, weil das Einbetten der Zeichenfolge
"</script>"
in ein<script>
Tag als unsicher angesehen wird.Diese Funktionalität kann durch Übergabe des
JSON_UNESCAPED_SLASHES
Flags deaktiviert werden. Die meisten Entwickler verwenden dies jedoch nicht, da das ursprüngliche Ergebnis bereits gültiges JSON ist.quelle
Hässliches PHP!
Das
JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
muss Standard sein, keine (seltsame) Option ... Wie sagt man es PHP-Entwicklern?Die Standardeinstellung MUSS die am häufigsten verwendete und die (derzeit) am häufigsten verwendeten Standards als UTF8 sein. Wie viele PHP-Code-Fragmente im Github oder an einem anderen Ort benötigen diese exoktische Funktion "In HTML eingebettet"?
quelle
'\/' === '/'
true zurückgegeben. Ich würde Ihnen raten, sich an Fakten zu halten. Die meisten Menschen sind in der Lage, mit einigen inkonsistenten Funktionsnamen umzugehen. Nur weil Sie nicht in der Vergangenheit sehen können, ist PHP kein schlechtes Werkzeug.