Как избежать одиночных кавычек?
Я пишу код JavaScript, который использует строку, визуализированную с помощью PHP. Как я могу избежать одиночных кавычек (и только одинарных кавычек) в моей строке PHP?
<script type="text/javascript">
$('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>
Ответы
Ответ 1
Довольно просто: echo str_replace('\'', '\\\'', $myString);
Однако я бы предложил использовать JSON и json_encode()
, поскольку он будет более надежным (например, цитирует новые строки):
<?php $data = array('myString' => '...'); ?>
<script>
var phpData = <?php echo json_encode($data) ?>;
alert(phpData.myString);
</script>
Ответ 2
Если вы хотите экранировать символы с помощью \
, у вас есть addcslashes()
. Например, если вы хотите экранировать только одинарные кавычки, как вопрос, вы можете сделать:
echo addcslashes($value, "'");
И если вы хотите экранировать '
, "
, \
и nul
(nul
байта), вы можете использовать addslashes()
:
echo addslashes($value);
Ответ 3
str_replace("'", "\'", $mystringWithSingleQuotes);
Ответ 4
В некоторых случаях я просто конвертирую его в ENTITIES:
// i.e., $x= ABC\DEFGH'IJKL
$x = str_ireplace("'", "'", $x);
$x = str_ireplace("\\", "\", $x);
$x = str_ireplace('"', """, $x);
На странице HTML визуальный вывод такой же:
ABC\DEFGH'IJKL
Тем не менее, он очищен в источнике.
Ответ 5
Чтобы заменить только одинарные кавычки, используйте это простое утверждение:
$string = str_replace("'", "\\'", $string);
Ответ 6
Вы можете использовать функцию addcslashes, чтобы сделать это следующим образом:
echo addcslashes($text, "'\\");
Ответ 7
Используйте встроенную функцию htmlspecialchars
. Это убежит от всех специальных символов. Если вы хотите уйти от цитаты, используйте 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'
Узнайте больше в PHP Функция htmlspecialchars()
Ответ 8
После долгой борьбы с этой проблемой, я думаю, нашли лучшее решение.
Объединение двух функций делает возможным экранирование строки для использования в качестве HTML.
Один - чтобы избежать двойной кавычки, если вы используете строку внутри вызова функции JavaScript, а другой - чтобы избежать двойной кавычки, чтобы избежать тех простых кавычек, которые идут вокруг аргумента.
Решение:
mysql_real_escape_string(htmlspecialchars($string))
Решать:
- строка PHP, созданная для вызова функции JavaScript, такой как
echo 'onclick = "javascript_function (\' '. mysql_real_escape_string (htmlspecialchars ($ string))"
Ответ 9
Я не уверен, что именно вы делаете со своими данными, но вы всегда можете попробовать:
$string = str_replace("'", "%27", $string);
Я использую это всякий раз, когда строки отправляются в базу данных для хранения.
% 27 является кодировкой для символа ', а также помогает предотвратить нарушение запросов GET, если в строке, отправленной на ваш сервер, содержится один символ '
. Я бы заменил '% 27 на JavaScript и PHP на тот случай, если кто-то попытается вручную отправить некоторые данные в вашу функцию PHP.
Чтобы сделать его более привлекательным для конечного пользователя, просто запустите функцию обратной замены для всех данных, которые вы возвращаете с вашего сервера, и замените все подстроки% 27 на '
.
Счастливого укола!
Ответ 10
Вот как я это сделал. Глупый, но простой.
$singlequote = "'";
$picturefile = getProductPicture($id);
echo showPicture('.$singlequote.$picturefile.$singlequote.');
Я работал над выпуском HTML, который назывался кодом JavaScript, чтобы показать изображение...
Ответ 11
Я написал следующую функцию. Он заменяет следующее:
Одинарная кавычка ['] с косой чертой и одинарная кавычка [\'].
Обратная косая черта [\] с двумя обратными косыми чертами [\\]
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 в том, что он предпочитает длинные замены.
Например, "Cool\r\nFeature" будет избегать \r\n, а не \n.