Как избежать только одинарных кавычек?
Я пишу некоторый код JavaScript, который использует строку, отображаемую с помощью PHP. Как я могу избежать одиночных кавычек (и только одиночных кавычек) в моей строке PHP?
<script type="text/javascript">
$('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>
11 ответов:
все просто:
echo str_replace('\'', '\\'', $myString);
Однако, я бы предложил использовать JSON иjson_encode()
функция, как это будет более надежным (кавычки новые строки, например):<?php $data = array('myString' => '...'); ?> <script> var phpData = <?php echo json_encode($data) ?>; alert(phpData.myString); </script>
чтобы заменить только одинарные кавычки, используйте это простое утверждение:
$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
(байт 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 & 'Tarzan'<br> Jane & 'Tarzan'<br> Jane & 'Tarzan'
Подробнее читайте здесь,https://www.w3schools.com/php/func_string_htmlspecialchars.asp