Как избежать только одинарных кавычек?
Я пишу некоторый код JavaScript, который использует строку, отображаемую с помощью PHP. Как я могу избежать одинарных кавычек (и только одинарных кавычек) в моей строке PHP?
<script type="text/javascript">
$('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>
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>
str_replace("'", "\'", $mystringWithSingleQuotes);
Чтобы заменить только одинарные кавычки, используйте это простое утверждение:
$string = str_replace("'","\\'", $string);
В некоторых случаях я просто преобразую его в СУЩНОСТИ:
//i.e. $x= ABC\DEFGH'IJKL
$x= str_ireplace("'", "'", $x);
$x= str_ireplace("\\", "\", $x);
$x= str_ireplace('"', """, $x);
На HTML-странице визуальный вывод такой же:
ABC\DEFGH'IJKL
Тем не менее, он очищен в источнике.
Если вы хотите избежать символов с помощью \
, у вас есть addcslashes()
, например, если вы хотите избежать только одинарных кавычек, как в вопросе, который вы можете сделать:
echo addcslashes($value, "'");
И если ты хочешь сбежать '
, "
, \
и nul
(нулевой байт) вы можете использовать addslashes()
:
echo addslashes($value);
После долгой борьбы с этой проблемой, я думаю, что нашел лучшее решение.
Объединение двух функций позволяет экранировать строку для использования в качестве HTML.
Один, чтобы избежать двойной кавычки, если вы используете строку внутри вызова функции javascript, а другой, чтобы избежать одинарной кавычки, чтобы избежать тех простых кавычек, которые обходят аргумент.
Решение:
mysql_real_escape_string(htmlspecialchars($string))
Решить:
- php, созданный для вызова функции javascript как
Echo 'onclick="функция javascript_function(\".mysql_real_escape_string(htmlspecialchars($строка))"
Я знаю, что опаздываю на вечеринку. Но вы можете использовать функцию addcslashes, чтобы сделать это так,
echo addcslashes($text, "'\\");
Не уверен, что именно вы делаете со своими данными, но вы всегда можете попробовать:
$строка = str_replace("'","%27", $ строка);
Я использую это всякий раз, когда строки отправляются в базу данных для хранения. %27 - это кодировка для символа", и это также помогает предотвратить прерывание запросов GET, если в строке, отправленной на ваш сервер, содержится один символ". Я бы заменил ' на %27 как в javascript, так и в PHP на случай, если кто-то попытается вручную отправить некоторые данные в ваша функция PHP. Чтобы сделать его более привлекательным для вашего конечного пользователя, просто запустите функцию обратной замены для всех данных, которые вы получаете с вашего сервера, и замените все подстроки %27 на '.
Счастливого избежания инъекций!
Я написал следующую функцию. Он заменяет следующее:
Одинарная кавычка ['] с косой чертой и одинарной кавычкой [\']
Обратная косая черта [\] с двумя обратными косыми чертами [\\]
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 вместо того, чтобы бежать вместе с ним.
Вот как я это сделал. Глупо, но просто.
$singlequote = "'";
$picturefile = getProductPicture($id);
echo showPicture('.$singlequote.$picturefile.$singlequote.');
Я работал над выводом HTML, который вызывал код JavaScript для отображения изображения...
Используйте собственную функцию 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 & 'Tarzan'<br>
Jane & 'Tarzan'<br>
Jane & 'Tarzan'
Подробнее читайте здесь, https://www.w3schools.com/php/func_string_htmlspecialchars.asp