Список разделов › phpBBex 1.x (поддерживается) › Поддержка 1.x
Если он действительно нужен - можно использовать моноширинный текст.
[just]{TEXT}[/just]
<div align="justify">{TEXT}</div>
А хотелось бы и рыбку съесть и т.д....dream.reckless:не совсем то что хотелось бы..
function bbcode_nl2br($text)
{
// custom BBCodes might contain carriage returns so they
// are not converted into <br /> so now revert that
$text = str_replace(array("\n", "\r"), array('<br />', "\n"), $text);
return $text;
}
function bbcode_nl2br($text)
{
$text = trim($text);
$text = preg_replace('~(\r\n|\n){2,}|$~', "\001", $text);
$text = nl2br($text);
$text = preg_replace('/(.*?)\001/s', '<p>$1</p>' . "\n", $text);
return $text;
}
function replace_wrap_with_p($text) {
$pre_tags = array();
if ( trim($text) === '' )
return '';
$text = $text . "\n"; // just to make things a little easier, pad the end
$text = preg_replace('|<br />\s*<br />|', "\n\n", $text);
// Space things out a little
$allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|option|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|noscript|samp|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)';
$text = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $text);
$text = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $text);
$text = str_replace(array("\r\n", "\r"), "\n", $text); // cross-platform newlines
$text = preg_replace("/\n\n+/", "\n\n", $text); // take care of duplicates
// make paragraphs, including one at the end
$texts = preg_split('/\n\s*\n/', $text, -1, PREG_SPLIT_NO_EMPTY);
$text = '';
foreach ( $texts as $tinkle )
$text .= '<p>' . trim($tinkle, "\n") . "</p>\n";
$text = preg_replace('|<p>\s*</p>|', '', $text); // under certain strange conditions it could create a P of entirely whitespace
$text = preg_replace('!<p>([^<]+)</(div|address|form)>!', "<p>$1</p></$2>", $text);
$text = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $text); // don't pee all over a tag
$text = preg_replace("|<p>(<li.+?)</p>|", "$1", $text); // problem with nested lists
$text = preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $text);
$text = str_replace('</blockquote></p>', '</p></blockquote>', $text);
$text = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $text);
$text = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $text);
$text = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $text); // optionally make line breaks
$text = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $text);
$text = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $text);
$text = preg_replace( "|\n</p>$|", '</p>', $text );
return $text;
}
bbcode_nl2br
используется десятки раз на каждой странице, поэтому она должна быть быстрой. Первый выглядит рабочим вариантом, но я бы написал ещё проще, с одной регуляркой:function bbcode_nl2br($text)
{
$text = trim($text);
$text = str_replace(array("\r\n", "\r"), "\n", $text);
$text = preg_replace('#(\n){2,}#', '<p>', $text);
$text = str_replace("\n", '<br>', $text);
return $text;
}
return $text;
на return '<p>' . $text;
в коде для принудительного добавления абзаца для первой строки. Получится так:function bbcode_nl2br($text)
{
$text = trim($text);
$text = str_replace(array("\r\n", "\r"), "\n", $text);
$text = preg_replace('#(\n){2,}#', '<p>', $text);
$text = str_replace("\n", '<br>', $text);
return '<p>' . $text;
}
p
{
text-indent: 35px;
}
Если быть точным, то без авторских комментариев нужно время, чтобы разобраться в логике этого кода. А поскольку кода много и выглядит он навёрнутым, я просто не стал разбираться в нём. Если factotum объяснит подробнее, зачем так много логики — тогда, возможно, станет понятна необходимость в подобном коде.VEG:и совсем не ясно, зачем так много логики в таком простом деле
Верно, так и задумывалось. Два подряд и более — это <p>, иначе — обычный <br>.factotum:как минимум хочется сохранить и <br>
один перенос = <br>
два подряд = <p>
Не уверен, что подобное поведение тега <p> было заложено стандартном HTML4, но древние браузера вроде IE5-6 корректно закрывают все <p>. Многие вещи, которые не входили в HTML4, но браузера уже умели их делать, вошли в HTML5.factotum:еще хватает браузеров без поддержки html5.
не доверяю я им.VEG:браузера вроде IE5-6
application/xhtml+xml
практически все CMS (включая и phpBB 3) отдают text/html
. В результате документ вроде как и XHTML (по DOCTYPE), но браузер парсит его как HTML, поэтому ничего и не падает.Вы действительно думаете, что компания, которая делает один из лучших браузеров, не в состоянии научить своего робота разбирать HTML5? :)factotum:и да. боты как минимум гугля не желают переходить на html5. из-за чего можно встретить белиберду в результатах поиска, описании для Г+/ФБ/...