Я предпочитаю использовать функцию forEach
, которая имеет собственное закрытие с созданием псевдодиапазона:
var funcs = [];
new Array(3).fill(0).forEach(function (_, i) { // creating a range
funcs[i] = function() {
// now i is safely incapsulated
console.log("My value: " + i);
};
});
for (var j = 0; j < 3; j++) {
funcs[j](); // 0, 1, 2
}
Это выглядит более уродливым, чем диапазоны на других языках, но IMHO менее чудовищным, чем другие решения.
есть способ отключить его?
blockquote>Да, вам нужно использовать только флаг
JSON_UNESCAPED_SLASHES
.! important прочитайте до: https://stackoverflow.com/a/10210367/367456 (знайте, с чем имеете дело - узнайте своего врага)
blockquote>json_encode($str, JSON_UNESCAPED_SLASHES);
Если у вас нет PHP 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/"
Да , но нет - ускорение косой черты - это хорошо . При использовании JSON внутри тегов <script>
это необходимо, как </script>
где угодно - даже внутри строки - закончит тег скрипта.
В зависимости от того, где используется JSON, это необязательно, но это может быть безопасно игнорируется.
С другой стороны, у меня возникла проблема с PHPUNIT, утверждающие, что urls содержался или был равен URL-адресу json_encoded -
my expected:
http://localhost/api/v1/admin/logs/testLog.log
будет кодироваться в:
http:\/\/localhost\/api\/v1\/admin\/logs\/testLog.log
Если вам нужно выполнить сравнение, преобразование URL-адреса с помощью:
addcslashes($url, '/')
разрешено для правильного вывода во время моих сравнений.