Бабель не переносит подпапки

Я предполагаю, что данные для передачи - это строка.

Как отмечают другие комментаторы, AJAX - одно из возможных решений, но недостатки превосходят плюсы: он имеет задержку, и это сложнее (для этого требуется код для получения значения как на стороне сервера, так и на стороне клиента), когда должна быть достаточно простая функция экранирования.

Итак, мы вернулись к экранированию. json_encode($string) работает , если вы сначала кодируете исходную строку как UTF-8, если это еще не так, потому что для json_encode требуются данные UTF-8. Если строка находится в ISO-8859-1, вы можете просто использовать json_encode(utf8_encode($string)); в противном случае вы всегда можете использовать iconv для выполнения преобразования.

Но есть большая проблема. Если вы используете его в событиях, вам нужно запустить htmlspecialchars() в результате, чтобы сделать правильный код. И тогда вы должны быть осторожны, чтобы использовать двойные кавычки для включения события или всегда добавлять ENT_QUOTES в htmlspecialchars. Например:

<?php
    $myvar = "I'm in \"UTF-8\" encoding and I have <script>script tags</script> & ampersand!";
    // Fails:
    //echo '<body onload="alert(', json_encode($myvar), ');">';
    // Fails:
    //echo "<body onload='alert(", json_encode($myvar), ");'>";
    // Fails:
    //echo "<body onload='alert(", htmlspecialchars(json_encode($myvar)), ");'>";

    // Works:
    //echo "<body onload='alert(", htmlspecialchars(json_encode($myvar), ENT_QUOTES), ");'>";
    // Works:
    echo '<body onload="alert(', htmlspecialchars(json_encode($myvar)), ');">';

    echo "</body>";

Однако вы не можете использовать htmlspecialchars для обычного JS-кода (код, заключенный в теги <script> ... </script>). Это позволяет использовать эту функцию, подверженную ошибкам, забыв htmlspecialchars результат при записи кода события.

Можно написать функцию, которая не имеет этой проблемы, и может использоваться как в событиях и в регулярном JS-коде, если вы включаете свои события всегда в одинарные кавычки или всегда в двойные кавычки. Вот мое предложение, требующее, чтобы они были в двойных кавычках (что я предпочитаю):

<?php

// Optionally pass the encoding of the source string, if not UTF-8
function escapeJSString($string, $encoding = 'UTF-8')
{
    if ($encoding != 'UTF-8')
        $string = iconv($encoding, 'UTF-8', $string);
    $flags = JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_UNESCAPED_SLASHES;
    $string = substr(json_encode($string, $flags), 1, -1);
    return "'$string'";
}

Для функции требуется PHP 5.4+. Пример использования:

<?php
    $myvar = "I'm in \"UTF-8\" encoding and I have <script>script tags</script> & ampersand!";
    // Note use of double quotes to enclose the event definition!
    echo '<body onload="alert(', escapeJSString($myvar), ');">';
    // Example with regular code:
    echo '<script>alert(', escapeJSString($myvar), ');</script>';
    echo '</body>';
0
задан Infamous911 24 March 2019 в 21:30
поделиться