Добрый день. Такая проблема. При использовании подсветки синтаксиса php кода с помощью highlight_string если строка слишком длинная она искажает вид страницы, тоесть не переноситься на другую строку, хотя пробелы имеются в ней имеются. Может   надо задать какой то определенный стиль? В голове крутиться решение через <wbr> с CSS wbr { display: inline-block; } но это я считаю уродливым решением. Помогите а, люди добрые?
А если заменять через регулярку только одиночные пробелы? Ведь если мы представим текст в исходном форматировании, то нам нужно, например, 4 пробела (таб) перед началом текста. Однако, не только эти 4 пробела представлены в виде  , но и все остальные пробелы. Поэтому, возможно, разумным будет заменять только еденичный пробел через регулярное выражение. Например: Код (Text): /[\s]{1}/im
kostyl, а они пусть остаются nbps-кой, зачем их заменять? Ведь перенос срабатывает в случае с пробелом, а если отступ - то не имеет смысла переносить и коверкать код.
Apple в том то и дело если пробелы в виде ' ' то все переноситься, а если в виде nbps то нет. ТОесть у меня исходный текс с nbps надо заменить все nbps на ' '(тобишь обычные), все кроме четырех подряд...или двух..
Извращение, но работает корректно: PHP: <?php $string = file_get_contents('invpages.com.php'); $string = preg_replace('/[ ]{1}/', '__WHITESPACE__', $string); $string = preg_replace('/__WHITESPACE__/', ' ', highlight_string($string, true)); // Смотрим на хороший результат echo $string; ?>
Пробую так, но тоже не выходит: PHP: <?php $sText = preg_replace('/\w{1}( ){1}\w{1}/iu', '$1 ', $sText);
Конечно не работает. Знаете как звучит ваш пример словами? Найти любую одну букву, после которой следует один пробел и другая одна буква, а потом заменить её на НАЙДЕННЫЙ ПРОБЕЛ. Я же написал работающий выше пример. Он корректно обрабатывает все переносы. Вообще, регулярные выражения не решают всех проблем, иногда приходится строить логику, как в случае вложенных тегов, например <b>text<b>something<b>Last</b>abc</b></b> Ни одно регулярное выражение одним проходом не сможет правильно заменить это. для этого существует callback фунцкия, а также preg_match учет в цикле. Вашей задаче не соответствует ни одно регулярное выражение, которое я мог бы придумать. Возможно, оно есть, но я довольно-таки сомневаюсь в этом.
Apple Ты не понял у меня изначально все пробелы через но в той регулярке что выше я писал в скобках движок форума не отобразил почемуто... У меня нет голых пробелов, мне их надо получить из и только там где к не премыкают другие с обоих сторон...
Все пробелы, что вы написали, опять порезались, но на этот раз я понял. Однако, хочу задать один единственный вопрос: http://www.php.ru/forum/viewtopic.php?p=156556#156556 Это решение не работает разве? Оно построену как раз по тому принципу, который вы сейчас снова описали: Заменяет на пробелы, причем только еденичные. Вы попробуйте и посмотрите на результат: как раз именно то, что вы описали. А ваше регулярное выражение МНЕ КАЖЕТСЯ неподходящим для этой задачи из-за [\w]{1} Потому что в конце у нас может быть точка с запятой и пробел, и оно не сработает.
Такое впечатление, что ты позабывал половину слов и оставил место на "как вспомню", а потом забыл вписать ) Я бы сделал так: 1. Подсвечиваешь 2. Заменяешь тройные на   3. Заменяешь одинарные на пробел
PHP: <?php $sText = highlight_string($sText, TRUE); $sText = preg_replace('/ /iu', ' ', $sText);//точкусзапятой не поставил, потому что браузер сжирает return preg_replace('/\x20\x20\x20\x20/iu', '    ', $sText);//аналогично четыре точкисзапятой