Интернет, компьютеры, софт и прочий Hi-Tech | ||
Избранные докиМетки (все метки)internet, it, интернет, интернет сеть, информационные технологии, ит, по, программное обеспечение, сайт, софт
Подписаться через RSS2Email.ru
Дополнительномобильные, электроника, видеокарта, СКС, AXIS, аутсорсинг, интернет, сеть, радионяни, гаджеты |
Показать HTML | Показать BBCode Траблы с умляутом и прочими HTML-мнемониками в однобайтных кодировкахFrom: Сержо Subject: вопрос по xBB версии 0.29 Date: Fri, 14 Dec 2007 11:33:39 +0200 Добрый день. При использовании вашей библиотеки xBB версии 0.29 я встретился со следующей проблемой: кодировка html-страниц и данных в БД MySQL установлена в windows-1251. в обрабатываемом тексте присутствуют дополнительные символы (например, ü, ä), которые в БД хранятся как: "...нормальный текстäтекстü и т.д." Библиотека экранирует символ "&" в "&" и в итоге текст отображется неправильно. Как с этим можно бороться ? Спасибо !!! .Сергей. From: Dmitriy Skorobogatov To: Сержо Subject: Re: вопрос по xBB версии 0.29 Date: Fri, 14 Dec 2007 18:03:23 +0500 xBB старается по возможности сохранить внешний вид обрабатываемого текста. Например, если в тексте встречается & то скрипт "считает", что пользователь хотел вывести именно "&" и чтобы это стало возможным, преобразует эту строку к "&". Чтобы избежать глюков, надо "скармливать" либе текст в том виде, в каком его ввел пользователь. Для этого следует хранить в базе текст "как есть". Для безопасности вполне достаточно экранирования с помощью функции mysql_real_escape_string. Мнемонизировать сохраняемый текст с помощью htmlspecialchars и т.п. при сохранении в базе нет никакой надобности. Гляньте этот пример - http://xbb.uz/docs/methods....b#comment31 В вашем конкретном случае можно поступить двояко:
В обоих случаях вам может помочь функция html_entity_decode. From: Сержо To: "Dmitriy Skorobogatov" Subject: Re[2]: вопрос по xBB версии 0.29 Date: Mon, 17 Dec 2007 12:24:27 +0200 Добрый день. xBB старается по возможности сохранить внешний вид обрабатываемого текста Да, вы совершенно правы по этому поводу. Но посмотрите, пожалуйста пример во вложении.
Поэтому для исправления отображения, я перед вызовом $obj->parse($str) преобразую $str: PHP $str = preg_replace("!&#!si","amp#",$str);после получения $str = $obj->get_html() преобразую обратно: PHP $str = preg_replace("!amp#!si","&#",$str);В итоге, у меня на 2-й и 4-й строках отображается а с умляутом, что (думаю, это объективно) подходит больше, чем результат приведенный во вложении. Что Вы думаете по этому поводу? Спасибо. .Сергей. From: Dmitriy Skorobogatov To: Сержо Subject: Re: вопрос по xBB версии 0.29 Date: Mon, 17 Dec 2007 20:12:38 +0500 Я наконец то понял вашу проблему. Рад, что вы нашли решение. Думаю, что это - проблема используемой однобайтной кодировки. При сабмите формы браузер превращает непредусмотренные кодировкой символы в HTML-мнемоники. В результате на вход парсера попадает не тот текст, который ввел пользователь, а тот который, был предварительно обработан браузером. И после этого xBB добросовестно пытается сохранить "пунктуацию" браузера
Я в своих проектах использую кодировку UTF-8, поэтому не сталкивался с этой проблемой, т.к. для UTF-8 "некошерных" символов нет. вы можете убедиться в этом на сайте xBB.uz, введя в форму "a" с умляутом и нажав кнопку предпросмотра. Но, возможно, другие люди сталкиваются с этой проблемой. Поэтому я буду рад, если вы разрешите опубликовать нашу переписку с вашим решением. С уважением, Дмитрий. From: Сержо To: "Dmitriy Skorobogatov" Subject: Re[2]: вопрос по xBB версии 0.29 Date: Mon, 17 Dec 2007 17:21:22 +0200 Спасибо за скорый ответ! Безусловно, я только "за" такое опубликование, т.к. это может помочь другим разработчикам
.С. Последнее редактирование: 2010-10-01 08:30:22 Метки материала: xbb, кодировка, utf 8, html, мнемоники html, амперсанд, bbcode, php, программа, интернет, скрипты, программирование, bbcode скрипт Оставьте, пожалуйста, свой комментарий к публикации |
|
© 2007-2012, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.