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


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

<script type="text/javascript">
    $('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>
Author: Peter Mortensen, 2011-06-07

11 answers

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

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

<script>
   var phpData = <?php echo json_encode($data) ?>;
   alert(phpData.myString);
</script>
 52
Author: Crozin, 2015-05-19 18:21:48
str_replace("'", "\'", $mystringWithSingleQuotes);
 15
Author: Julian, 2011-06-07 17:29:57

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

$string = str_replace("'","\\'", $string);
 9
Author: technology, 2011-06-07 17:29:58

В некоторых случаях я просто преобразую его в СУЩНОСТИ:

                          //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

Тем не менее, он очищен в источнике.

 9
Author: T.Todua, 2015-05-10 13:20:37

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

echo addcslashes($value, "'");

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

echo addslashes($value);
 9
Author: PhoneixS, 2017-02-03 10:31:26

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

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

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

Решение:

mysql_real_escape_string(htmlspecialchars($string))

Решить:

  • php, созданный для вызова функции javascript как

Echo 'onclick="функция javascript_function(\".mysql_real_escape_string(htmlspecialchars($строка))"

 1
Author: arturocu81, 2015-04-23 11:22:20

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

echo addcslashes($text, "'\\");
 1
Author: Mike A, 2018-01-21 23:03:38

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

$строка = str_replace("'","%27", $ строка);

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

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

 0
Author: Mike, 2013-02-12 14:48:26

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

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

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

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

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

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

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

 0
Author: Basil Musa, 2015-11-19 15:15:20

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

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

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

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

 0
Author: Paisano Centobie, 2017-08-28 20:49:24

Используйте собственную функцию htmlspecialchars она будет удалена из всех специальных функций. если вы хотите конкретно сбежать из 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

 0
Author: Nishad Up, 2018-04-06 06:43:32