Как мне избежать только одинарные кавычки? - PullRequest
62 голосов
/ 07 июня 2011

Я пишу некоторый код JavaScript, который использует строку, отображаемую с помощью PHP. Как я могу избежать одинарных кавычек (и только одинарных кавычек) в моей строке PHP?

<script type="text/javascript">
    $('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>

Ответы [ 11 ]

58 голосов
/ 07 июня 2011

Очень просто: echo str_replace('\'', '\\\'', $myString); Тем не менее, я бы предложил использовать функции JSON и json_encode(), так как она будет более надежной (кавычки, например, новые строки):

<?php $data = array('myString' => '...'); ?>

<script>
   var phpData = <?php echo json_encode($data) ?>;
   alert(phpData.myString);
</script>
19 голосов
/ 03 февраля 2017

Если вы хотите экранировать символы с \, у вас есть addcslashes(). Например, если вы хотите экранировать только одинарные кавычки, например вопрос, вы можете сделать:

echo addcslashes($value, "'");

И если вы хотите экранировать ', ", \ и nul (нулевой байт), вы можете использовать addslashes():

echo addslashes($value);
15 голосов
/ 07 июня 2011
str_replace("'", "\'", $mystringWithSingleQuotes);
9 голосов
/ 02 апреля 2015

В некоторых случаях я просто конвертирую его в 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

Тем не менее, он очищен в источнике.

8 голосов
/ 07 июня 2011

Чтобы заменить только одинарные кавычки, используйте это простое утверждение:

$string = str_replace("'", "\\'", $string);
4 голосов
/ 22 января 2018

Вы можете использовать функцию addcslashes , чтобы сделать это следующим образом:

echo addcslashes($text, "'\\");
3 голосов
/ 06 апреля 2018

Используйте встроенную функцию 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 () Функция

1 голос
/ 09 мая 2014

После долгого времени борьбы с этой проблемой, я думаю, нашли лучшее решение.

Объединение двух функций делает возможным экранирование строки для использования в качестве HTML.

Одна для экранирования двойных кавычекесли вы используете строку внутри вызова функции JavaScript, и другие, чтобы избежать одиночной кавычки, чтобы избежать тех простых кавычек, которые идут вокруг аргумента.

Решение:

mysql_real_escape_string(htmlspecialchars($string))

Решить:

  • строка PHP, созданная для вызова функции JavaScript, например

echo 'onclick = "javascript_function (\''. mysql_real_escape_string (htmlspecialchars ($ string)) "*

0 голосов
/ 19 ноября 2015

Я написал следующую функцию.Он заменяет следующее:

Одинарная кавычка ['] с косой чертой и одиночная кавычка [\'].

Обратная косая черта [\] с двумя обратными косыми чертами [\\]

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, а не \ \ вдоль.

0 голосов
/ 15 мая 2013

Вот как я это сделал.Глупо, но просто.

$singlequote = "'";
$picturefile = getProductPicture($id);

echo showPicture('.$singlequote.$picturefile.$singlequote.');

Я работал над выводом HTML, который вызывал код JavaScript для показа изображения ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...