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

Я пишу код 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("'", "&apos;", $x); $x= str_ireplace("\\", "&bsol;", $x); $x= str_ireplace('"', "&quot;", $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 ($ 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, чтобы показать изображение …