Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Траблы с умляутом и прочими 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
 
В вашем конкретном случае можно поступить двояко:
  1. Уже сохраненные в базе тексты конвертнуть к такому виду, в котором их запостили пользователи. Сделать это один раз, а потом работать с базой как обычно.
     
  2. Работать с базой так, как до сих пор работали, но полученные из базы тексты перед парсингом преобразовывать к виду, в котором их запостили пользователи.

В обоих случаях вам может помочь функция 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 добросовестно пытается сохранить "пунктуацию" браузера Well
 
Я в своих проектах использую кодировку 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

 
Спасибо за скорый ответ!
 
Безусловно, я только "за" такое опубликование, т.к. это может помочь другим разработчикам Well
 
.С.
Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2010-10-01 08:30:22

Метки материала: xbb, кодировка, utf 8, html, мнемоники html, амперсанд, bbcode, php, программа, интернет, скрипты, программирование, bbcode скрипт

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.