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

Я пишу код 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("'",  "&apos;", $x);
$x = str_ireplace("\\", "&bsol;", $x);
$x = str_ireplace('"',  "&quot;", $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 &amp; 'Tarzan'<br>
Jane &amp; &#039;Tarzan&#039;<br>
Jane &amp; '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.