Как избежать только одинарных кавычек?


Я пишу некоторый код JavaScript, который использует строку, отображаемую с помощью PHP. Как я могу избежать одиночных кавычек (и только одиночных кавычек) в моей строке PHP?

<script type="text/javascript">
    $('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>
11 52

11 ответов:

все просто: echo str_replace('\'', '\\'', $myString); Однако, я бы предложил использовать JSON и json_encode() функция, как это будет более надежным (кавычки новые строки, например):

<?php $data = array('myString' => '...'); ?>

<script>
   var phpData = <?php echo json_encode($data) ?>;
   alert(phpData.myString);
</script>
str_replace("'", "\'", $mystringWithSingleQuotes);

чтобы заменить только одинарные кавычки, используйте это простое утверждение:

$string = str_replace("'","\'", $string);

в некоторых случаях я просто конвертирую его в сущности:

                          //i.e.  $x= ABC\DEFGH'IJKL
$x=  str_ireplace("'",  "&apos;", $x);
$x=  str_ireplace("\", "&bsol;", $x);
$x=  str_ireplace('"',  "&quot;", $x);

на HTML-странице визуальный вывод такой же:

ABC\DEFGH'IJKL

тем не менее, он дезинфицируется в источнике.

если вы хотите уйти с символов \вы addcslashes() например, если вы хотите избежать только одинарные кавычки, как вопрос, что можно сделать:

echo addcslashes($value, "'");

и если ты хочешь сбежать ',",\ и nul (байт null) вы можете использовать addslashes():

echo addslashes($value);

после долгого времени борьбы с этой проблемой, я думаю, нашли лучшее решение.

объединение двух функций позволяет экранировать строку для использования в качестве HTML.

один, чтобы избежать двойной кавычки, если вы используете строку внутри вызова функции javascript, и другие, чтобы избежать одной цитаты, чтобы избежать тех простых цитат, которые идут вокруг аргумента.

устранение:

mysql_real_escape_string(htmlspecialchars($string))

решение:

  • a php создан для вызова функции javascript типа

Эхо 'onclick=" javascript_function (\".mysql_real_escape_string (htmlspecialchars ($string))"

Я знаю, что опаздываю на вечеринку. Но вы можете использовать addcslashes функция, чтобы сделать это так,

echo addcslashes($text, "'\");

Не уверен, что именно вы делаете с вашими данными, но вы всегда можете попробовать:

$string = str_replace("'","%27", $string);

Я использую это всякий раз, когда строки отправляются в базу данных для хранения. 27% - это кодировка для персонажа, а также помогает предотвратить перебои запросов GET, если один символ содержится в строке направлен на ваш сервер. Я бы заменил ' на %27 как в javascript, так и в PHP на случай, если кто-то попытается вручную отправить некоторые данные для вашей функции PHP. Чтобы сделать его более красивым для вашего конечного пользователя, просто запустите обратную функцию замены для всех данных, которые вы получаете с вашего сервера, и замените все подстроки %27 на '.

счастливая инъекция избегая!

Я написал следующую функцию. Он заменяет следующее:

одинарная кавычка ['] с косой чертой и одинарной кавычкой [\']

обратная косая черта [ \ ] с двумя обратными косыми чертами [\\]

function escapePhpString($target) {
    $replacements = array(
            "'" => '\\'',
            "\" => '\\'
    );
    return strtr($target, $replacements);
}

Вы можете изменить его, чтобы добавить или удалить замены символов в массиве $замен. Например, чтобы заменить \р\н она становится "\р\н" => "\р\н" и "\N" => "\П".

/**
 * With new line replacements too
 */
function escapePhpString($target) {
    $replacements = array(
            "'" => '\\'',
            "\" => '\\',
            "\r\n" => "\r\n",
            "\n" => "\n"
    );
    return strtr($target, $replacements);
}

аккуратная особенность strtr заключается в том, что он предпочтет длинные замены. Образец, "Круто\Р\nFeature" сбежать \р\н, а не побега \Н вместе.

вот как я это сделал. Глупо, но просто.

$singlequote = "'";
$picturefile = getProductPicture($id);

echo showPicture('.$singlequote.$picturefile.$singlequote.');

Я работал над выводом HTML, который вызвал код JavaScript, чтобы показать изображение...

использовать встроенную функцию htmlspecialchars он будет бежать от всех специальных charector. если вы хотите бежать из quate специально, используйте ENT_COMPAT или ENT_QUOTES. Вот вам пример.

$str = "Jane & 'Tarzan'";
echo htmlspecialchars($str, ENT_COMPAT); // Will only convert double quotes
echo "<br>";

echo htmlspecialchars($str, ENT_QUOTES); // Converts double and single quotes
echo "<br>";

echo htmlspecialchars($str, ENT_NOQUOTES); // Does not convert any quotes

выход будет выглядеть так

Jane &amp; 'Tarzan'<br>
Jane &amp; &#039;Tarzan&#039;<br>
Jane &amp; 'Tarzan'

Подробнее читайте здесь,https://www.w3schools.com/php/func_string_htmlspecialchars.asp