Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
7 / 7 / 2
Регистрация: 12.04.2011
Сообщений: 318
1

Юникод и мнемоники

15.09.2013, 19:23. Просмотров 1674. Ответов 6
Метки нет (Все метки)

Здравствуйте.

Всю жизнь юзал cp1251.

Перешел на юникод, и кое что не понятно.

Раньше на cp надо было постоянно проверять данные, юзать htmlspecialchars и тп. В многобайтовых кодировках htmlspecialchars получается безполезен когда я не хочу чтобы к примеру чтобы юзер занес в бд html теги. Или я чет не догоняю.
Просто к примеру когда у меня в бд   от выводит не кавычку а этот текст. Запутался уже че и к чему

Буду рад и ссылкам где можно почитать..

Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2013, 19:23
Ответы с готовыми решениями:

Мнемоники (сущности) спецсимволов
Первый и третий используются в html. А другие два где применяются в Веб программировании ?

вывод кода мнемоники,а не его реальный вывод
Добрый день! Есть html разметка с текстом, например: <b>Привет мир!</b>  В конце текста...

PHP и Юникод
1. У меня проблема с loadHTMLFile: <?php echo "<font size=1>"; $doc = new...

Кодировка Юникод при создании XML-файла
В блокноте Windows в окне "Сохранить как" есть кодировки ANSI, Юникод, Юникод (Big Endian), UTF-8. ...

6
weboman
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
15.09.2013, 20:03 2
PHP
1
2
3
4
// когда в базу сохраняете
$test = htmlspecialchars('"Test"');
// вывод на страницу
echo htmlspecialchars_decode($test);
или

PHP
1
2
3
4
// когда в базу сохраняете
$test2 = htmlentities('"Test 2"');
// вывод на страницу
echo html_entity_decode($test2);
1
Заблокирован
16.09.2013, 05:37 3
Цитата Сообщение от furyon Посмотреть сообщение
когда я не хочу чтобы к примеру чтобы юзер занес в бд html теги
Если в контексте теги не нужны вообще, например это имя, логин, адрес и тп - то strip_tags(); на входе. Но с другой стороны какой дурак будет вписывать в свой адрес теги? Кто будет вписывать - тот не получит доставки, или не сможет залогиниться. Следовательно в этом смысле правильность ввода надо проверять до внесения данных в БД, и может быть до пхп - яваскриптом.

Обычная практика сохранять как есть, выводить по опциям.

Тут надо понимать и разделять требования СУБД и безопасности, которые связаны, но не очень, но связаны, но не очень.

В БД вы должны подать запрос без ошибок в синтаксисе. Для избежания чего применяется санация значений типа mysqli::real_escape_string(). Которая без сведений о выбранной кодировке может убить все кроме Latin. Сведения о кодировке в данном случае известны mysqli.

Хтмл для безопасности санируется на выводе. Если вы не хотите его рендерить то пропускаете через htmlentities(). Если хотите рендерить то пропускаете через strip_tags() с перечислением чего можно рендерить.

Добавлено через 5 минут
У предыдущего автора иллюстрируется безосновательная безсистема. Туда фильтрушь, обратно фильтруешь - это и вызывает кашу в голове и кодах.

Взяв за базу правило "записываю как есть, вывожу как надо" вы резко все упростите.

Можно взять за базу другое правило "записываю как надо, вывожу как есть". Тогда никаких хтмлей вы не увидите вообще. Тоже имеет смысл если записи в бд не требуют разметки, или она реализуется другими средствами.
1
7 / 7 / 2
Регистрация: 12.04.2011
Сообщений: 318
16.09.2013, 12:00  [ТС] 4
Цитата Сообщение от sqlnub Посмотреть сообщение
Если в контексте теги не нужны вообще, например это имя, логин, адрес и тп - то strip_tags(); на входе. Но с другой стороны какой дурак будет вписывать в свой адрес теги? Кто будет вписывать - тот не получит доставки, или не сможет залогиниться. Следовательно в этом смысле правильность ввода надо проверять до внесения данных в БД, и может быть до пхп - яваскриптом.

Обычная практика сохранять как есть, выводить по опциям.

Тут надо понимать и разделять требования СУБД и безопасности, которые связаны, но не очень, но связаны, но не очень.

В БД вы должны подать запрос без ошибок в синтаксисе. Для избежания чего применяется санация значений типа mysqli::real_escape_string(). Которая без сведений о выбранной кодировке может убить все кроме Latin. Сведения о кодировке в данном случае известны mysqli.

Хтмл для безопасности санируется на выводе. Если вы не хотите его рендерить то пропускаете через htmlentities(). Если хотите рендерить то пропускаете через strip_tags() с перечислением чего можно рендерить.

Добавлено через 5 минут
У предыдущего автора иллюстрируется безосновательная безсистема. Туда фильтрушь, обратно фильтруешь - это и вызывает кашу в голове и кодах.

Взяв за базу правило "записываю как есть, вывожу как надо" вы резко все упростите.

Можно взять за базу другое правило "записываю как надо, вывожу как есть". Тогда никаких хтмлей вы не увидите вообще. Тоже имеет смысл если записи в бд не требуют разметки, или она реализуется другими средствами.

Спасибо за подробный ответ. Очень для меня полезно.

И еще хотел уточнить например когда использую tinyMce или подобные вещи, по идее html надо сохранять но есть и угрозы что пользователь ченить вредное внедрить, в таком случае юзать strip_tags с белым листом тегов которые пускать? Да и это вроде тоже нехватит. Или есть решения готовые?
0
Заблокирован
16.09.2013, 16:22 5
Не похоже что пошло на пользу.
1
7 / 7 / 2
Регистрация: 12.04.2011
Сообщений: 318
16.09.2013, 17:04  [ТС] 6
Еще пару раз перечитал. Каюсь, писал не подумавши.
0
Заблокирован
17.09.2013, 06:25 7
Второе правило подразумевает знание наперед всех обстоятельств. Которые внезапно могут поменяться и потребовать выдать теги html и даже ява-скрипты. По этой причине первое правило - сохранять как есть, выводить по обстоятельствам - оказывается универсальным.

Санация самих запросов к БД имеет отношение только к СУБД и опосредованное к безопасности.

Добавлено через 40 минут
Из соседней темы. Например если вы очистили текст от хтмля то как будете выводить переносы строк? "\n" перенесет строку в кодах, а на странице работает только
HTML5
1
<br/>
Откуда и растет функция nl2br()
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.09.2013, 06:25

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Мнемоники HTML в XML
Ребят подскажите, почему когда я через форму POST-ом добавляю данные в xml фаил все html теги...

Помогут ли мнемоники от SQL инъекции?
Всем привет! Начал изучать PHP и с ним MySQL. PHP более или менее знаю, а вот MySQL почти нет. В...

HTML-сущности, мнемоники, спецсимволы и код
Сразу извиняюсь за возможно тупой вопрос, но никак не могу разобраться в этих понятиях. Вот как...

Юникод в Си++
Здравствуйте. int main(int argc, char *argv) { wstring s1 = L&quot;abracadabra&quot;; cout...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.