Я пишу код JavaScript, который использует строку, визуализированную с помощью PHP. Как я могу избежать одиночных кавычек (и только одиночных кавычек) в моей строке PHP?
<script type="text/javascript"> $('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>'); </script>
Довольно просто: 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);
В некоторых случаях я просто конвертирую его в ENTITIES:
//ie $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))
Решать:
echo 'onclick = "javascript_function (\' '. mysql_real_escape_string (htmlspecialchars ($ string))"
Не уверен, что именно вы делаете с вашими данными, но вы всегда можете попробовать:
$ string = str_replace ("'", "% 27", $ string);
Я использую это, когда строки отправляются в базу данных для хранения. % 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 заключается в том, что она предпочтет длительные замены. Например, «Cool \ r \ nFeature» уберет \ r \ n, а не экранирует \ n.
Вот как я это сделал. Глупый, но простой.
$singlequote = "'"; $picturefile = getProductPicture($id); echo showPicture('.$singlequote.$picturefile.$singlequote.');
Я работал над выпуском HTML, который назывался кодом JavaScript, чтобы показать изображение …