Мне нужен htmlentities () или htmlspecialchars () в подготовленных операторах?

Python-код для удаления пустой строки из CSV-файла без создания другого файла.

def ReadWriteconfig_file (файл):

try:
    file_object = open(file, 'r')
    lines = csv.reader(file_object, delimiter=',', quotechar='"')
    flag = 0
    data=[]
    for line in lines:
        if line == []:
            flag =1
            continue
        else:
            data.append(line)
    file_object.close()
    if flag ==1: #if blank line is present in file
        file_object = open(file, 'w')
        for line in data:
            str1 = ','.join(line)
            file_object.write(str1+"\n")
        file_object.close() 
except Exception,e:
    print e
8
задан sth 2 August 2009 в 05:14
поделиться

4 ответа

htmlentities и htmlspecialchars используются для генерации вывода HTML , который отправляется в браузер.

Подготовленные операторы используются для генерировать / отправлять запросы к ядру базы данных .

Оба позволяют экранировать данные; но они не убегают для того же использования.
Итак, нет, подготовленные операторы (для запросов SQL) не мешают вам правильно использовать htmlspecialchars / htmlentities (для генерации HTML)

О strip_tags : удаляет теги из строки, а htmlspecialchars преобразует их в объекты HTML.
Эти две функции не делают одно и то же; вы должны выбрать, какой из них использовать, в зависимости от ваших потребностей / того, что вы хотите получить.

Например, с помощью этого фрагмента кода:

$str = 'this is a <strong>test</strong>';
var_dump(strip_tags($str));
var_dump(htmlspecialchars($str));

Вы получите такой результат:

string 'this is a test' (length=14)
string 'this is a &lt;strong&gt;test&lt;/strong&gt;' (length=43)

В первом случае, без тега; во втором - правильно экранированные.

И с выводом HTML:

$str = 'this is a <strong>test</strong>';
echo strip_tags($str);
echo '<br />';
echo htmlspecialchars($str);

Вы получите:

this is a test
this is a <strong>test</strong>

Какой из них вам нужен? Это важный вопрос ; -)

14
ответ дан 3 November 2019 в 14:19
поделиться

Ничего не меняется для htmlspecialchars () , потому что это для HTML, а не для SQL. Вам по-прежнему нужно правильно экранировать HTML, и лучше сделать это, когда вы действительно генерируете HTML, а не привязываете его как-то к базе данных.

Если вы используете подготовленные операторы, тогда вам не понадобится mysql_ [ real_] escape_string () больше (при условии, что вы придерживаетесь заполнителей подготовленных операторов и сопротивляетесь искушению обойти это с помощью манипуляций со строками).

Если вы хотите избавиться от htmlspecialchars () , тогда существуют механизмы создания шаблонов HTML, которые работают аналогично подготовленным операторам в SQL и избавляют вас от необходимости экранировать все вручную, например PHPTAL .

8
ответ дан 3 November 2019 в 14:19
поделиться

Вам не нужны htmlentities () или htmlspecialchars () при вставке материала в базу данных, ничего плохого не произойдет, вы не будете уязвимы для SQL-инъекции, если используете подготовленные операторы. Хорошо, что теперь вы сохраните исходный пользовательский ввод в своей базе данных.

Вам НЕОБХОДИМО экранировать данные при выводе и отправлять их обратно клиенту, - когда вы извлекаете данные из базы данных, иначе вы будете уязвим для атак межсайтового скриптинга и других неприятностей. Вам нужно будет экранировать их для нужного вам формата вывода, например html, поэтому вам все равно понадобятся htmlentities и т. Д.

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

7
ответ дан 3 November 2019 в 14:19
поделиться

Я бы все равно был склонен кодировать HTML. Если вы создаете какую-либо форму CMS или веб-приложения, проще сохранить его как закодированный HTML, а затем перекодировать по мере необходимости.

Например, при переносе информации в TextArea, измененную TinyMCE, они рекомендуют, чтобы HTML должен быть закодирован - поскольку спецификация HTML не допускает HTML внутри текстовой области.

Я бы также strip_tags () из любого места, где вам не нужен HTML-код.

-2
ответ дан 3 November 2019 в 14:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: