Song Опубликовано 11 Декабря 2003 Жалоба Поделиться Опубликовано 11 Декабря 2003 Форум по программингу, приходится часто постить код программы. первый пробел обрезается! Уже весь post_parser.php перерыл.Помогите плиз. Может кто это исправил уже? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 11 Декабря 2003 Жалоба Поделиться Опубликовано 11 Декабря 2003 Проверяй каким текст приходит в regex_code_tag. Дело в том что IBP на входе уже парсит текст и заменяет чать опасных символов на безопасный эквивалент. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Song Опубликовано 11 Декабря 2003 Автор Жалоба Поделиться Опубликовано 11 Декабря 2003 Ну и чем же опасен пробел?Так вот как бы его проверить-то... Это не среда, что протрассировать код можно Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Adderino Опубликовано 11 Декабря 2003 Жалоба Поделиться Опубликовано 11 Декабря 2003 А что htmlspecialchars не катит? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Song Опубликовано 11 Декабря 2003 Автор Жалоба Поделиться Опубликовано 11 Декабря 2003 Всё катит, только скажите что исправить Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 11 Декабря 2003 Жалоба Поделиться Опубликовано 11 Декабря 2003 test //-------------------------------------- // Add in the smilies box //-------------------------------------- $show_table = 0; $count = 0; $smilies = "<tr align='center'>\n"; // Get the smilies from the DB $DB->query("SELECT * FROM ibf_emoticons WHERE clickable='1'"); while ($elmo = $DB->fetch_row() ) { $show_table++; $count++; $smilies .= "<td><a href=\"javascript:emoticon('".$elmo['typed']."')\"><img src=\"".$ibforums->vars['EMOTICONS_URL']."/".$elmo['image']."\" alt='smilie' border='0'></a> </td>\n"; if ($count == $ibforums->vars['emo_per_row']) { $smilies .= "</tr>\n\n<tr align='center'>"; $count = 0; } }and so if (!($permissions['adminpermissions'] & CANCONTROLPANEL)) { if ($vboptions['maxreputationperday'] >= $vboptions['reputationrepeat']) { $klimit = ($vboptions['maxreputationperday'] + 1); } else { $klimit = ($vboptions['reputationrepeat'] + 1); } $checks = $DB_site->query(" SELECT userid,dateline FROM " . TABLE_PREFIX . "reputation WHERE whoadded = $bbuserinfo[userid] ORDER BY dateline DESC LIMIT 0,$klimit "); $i = 0; while ($check = $DB_site->fetch_array($checks)) { if (($i < $vboptions['reputationrepeat']) AND ($check['userid'] == $userid)) { eval(print_standard_error('error_reputationsameuser')); } if ($i == $vboptions['maxreputationperday'] AND (($check['dateline'] + 86400) > TIMENOW)) { eval(print_standard_error('error_reputationtoomany')); } $i++; } } Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 11 Декабря 2003 Жалоба Поделиться Опубликовано 11 Декабря 2003 я не знаю у меня все ок и ничего не пропадает. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Song Опубликовано 11 Декабря 2003 Автор Жалоба Поделиться Опубликовано 11 Декабря 2003 (изменено) Vanish дело в том, что у тебя здесь не один пробел а много.Т.е. два и больше уже отображатся, а вот один - режется! Пожалуйста демонстрация: Здесь на самом деле перед словом "Здесь" один пробел А здесь два пробела - проблем нетКак видно, здесь тот же глюк Изменено 11 Декабря 2003 пользователем Song Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 11 Декабря 2003 Жалоба Поделиться Опубликовано 11 Декабря 2003 один пробел Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 11 Декабря 2003 Жалоба Поделиться Опубликовано 11 Декабря 2003 два пробела Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 11 Декабря 2003 Жалоба Поделиться Опубликовано 11 Декабря 2003 fixed Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Song Опубликовано 11 Декабря 2003 Автор Жалоба Поделиться Опубликовано 11 Декабря 2003 Как??? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 11 Декабря 2003 Жалоба Поделиться Опубликовано 11 Декабря 2003 в post_parser после $txt = preg_replace( "#\s{2}#", " ", $txt );добавить $txt = preg_replace( "#\s#", " ", $txt ); а можно вообще заменить Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Song Опубликовано 11 Декабря 2003 Автор Жалоба Поделиться Опубликовано 11 Декабря 2003 10x ! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 14 Декабря 2003 Жалоба Поделиться Опубликовано 14 Декабря 2003 Song все страдаете =) http://forum.sources.ru/index.php?showtopic=40458 Такс по порядку:1. Куда пропадает символ пробела. Он пропадает благодаря браузерам, ну или спецификации HTML (я там не был, врать не стану). Если перед символом пробела нет никаких печатаемых символов, то они отбрасываются.Вот пример хтмл кода:<html> <head></head> <body> <br> 121212 <br> 1212121 <br> 1212121 </body> </html> в действии тутЕсли же мы хотим что бы пробелы выводились, то не зря сделан спецсимвол - Вот пример хтмл кода:<html> <head></head> <body> <br> 121212 <br> 1212121 <br> 1212121 </body> </html>в действии тут 2. Что делать если мы стремимся уменьшить трафик. А именно не хотим что бы вместо 1-го символа ("чистый" пробел) было шесть символов (пробел ). Так как по выше изложенным причинам (см. пункт 1) получается что без не обойтись. Но выясняется, что связка +' ' работает на ура, давая результат два пробела, но не в 12 символов, а всего в 7. 3. Как реализовать программно?Все просто заменим все "чистые" пробелы на -пробел$txt = preg_replace( "#\s#" , " ", $txt );А дальше пологаясь на выводы пункта 2, заменяем каждые два -пробела на связку +' '$txt = preg_replace( "#( ){2}#" , " ", $txt ); 4. Но и этого мало, перечитав еще раз пункт 1 и посмотрев решение 3 приходим к выводу, что и это решение не эффективно в плане сбережения трафика. Так как у нас "чистые" пробелы окруженные текстом, оказываются замененными на -пробел. Тем самым выиграв 5 символов в одном месте мы теряем гораздо больше в других местах. Значит решение 3 хоть и дает результат, но оно не оптимально. 5. Наконец то оптимальное решение:Если мы самый первый "чистый" пробел строки заменим на -пробел, а каждый два "чистых" пробела на связку +' ', то получим именно то к чему стремились.Собственно код:Заменяем все "чистые" пробелы, в начале строки, на -пробелы$txt = preg_replace( "#^\s#" , " ", $txt );При переводе строки, форум заменяет символы возврата каретки \r и перевода строки \n на <br>, следовательно первого условия явно не достаточно, поэтому добавим следующее:$txt = str_replace( "<br> " , "<br> ", $txt);Ну и наконец каждые два "чистых" пробела на связку:$txt = preg_replace( "#\s{2}#" , " ", $txt ); Вот и вся любовь. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Song Опубликовано 14 Декабря 2003 Автор Жалоба Поделиться Опубликовано 14 Декабря 2003 Vanish Спасибо, Vanish, напишу что наконец получилось Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 15 Декабря 2003 Жалоба Поделиться Опубликовано 15 Декабря 2003 Song $txt = preg_replace( "#<br />\s#" , "<br> ", $txt );лол. "Ратую за уменьшение трафика, а на скорость мне вобщем то плевать". Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Вопрос
Song
Форум по программингу, приходится часто постить код программы. первый пробел обрезается! Уже весь post_parser.php перерыл.
Помогите плиз. Может кто это исправил уже?
Ссылка на комментарий
Поделиться на других сайтах
16 ответов на этот вопрос
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.