PHP htmlspeciachars не работает с одинарными кавычками

Я пытаюсь преобразовать одну кавычку в соответствующий HTML-код для вставки в базу данных, но, похоже, это не работает. Когда я создаю следующий скрипт:

<?php
 $str = "& and ' and \" and < and >";
 echo htmlspecialchars($str);
?>

Мой браузер возвращает следующее:

&amp; and ' and &quot; and &lt; and &gt;

Что я делаю не так? Я прочитал руководство PHP по функции htmlspecialchars(), и в нем говорится, что она применяется к одинарным кавычкам, но, похоже, у меня это не работает.


person Malignus    schedule 19.07.2014    source источник


Ответы (1)


Используйте htmlentities() с флагом ENT_QUOTES. Из руководства:

ENT_QUOTES Преобразует как двойные, так и одинарные кавычки.

htmlentities($text, ENT_QUOTES);

Если вы просто хотите заменить ' на &#39;, вы можете, конечно, использовать str_replace():

str_replace("'", "&#39;", $text);

Однако поскольку вы хотите вставить данные в код SQL, загляните в подготовленные операторы в PDO или MySQLi. Эти функции служат именно той цели, которая вам нужна (насколько я могу судить), и будут лучше, чем ваша собственная функция. В конце концов, зачем изобретать велосипед?

Просто для протокола: не используйте устаревшие функции MySQL в PHP, как описано в _Почему мне не следует использовать функции mysql__* в PHP?.

person ljacqu    schedule 19.07.2014
comment
@ljacqu: Спасибо! Я только начинаю, так что PDO сейчас у меня в голове. Я посмотрю на это. :) - person Malignus; 19.07.2014
comment
@Malignus Я думаю, что MySQLi немного дружелюбнее в этом аспекте. Я знаю только PDO, поэтому не могу сказать, но из кода, который я видел, это может быть более простым. - person ljacqu; 19.07.2014