Кошмарный перенос текста в PHP после PREG_REPLACE - PullRequest
0 голосов
/ 05 мая 2011

Провинции - это group_concat всех отдельных записей, которые содержат провинцию, некоторые из которых являются пустыми.Итак, когда я кодирую:

$provinces = ($row['provinces']);

echo "<td>".wordwrap($provinces, 35, "<br />")."</td>";

Вот как выглядит результат:

Минас-Жерайс ,,, Рио-Гранде делать

Сул, Санта-Катарина, Парана, Сан-Паулу

Однако, когда я пытаюсь preg_replacement некоторые из нулей, и добавить несколько пробелов с этим выражением:

$ provinces = preg_replace ($ pattern, $ replaces, ($ row ['provinces']));

echo "<td>".wordwrap($provinces, 35, "<br />")."</td>";`

Вот что я получаю !!!: (

Минас-Жерайс, Риу-Гранди-ду

Сул, Санта

Катарина, Парана, Сан-Паулу

Выходные данныеочень неестественно выглядит.

Кстати: вот поиск и замена массивов:

$patterns[0] = '/,,([,]+)?/';       $replaces[0] = ',&nbsp;';
$patterns[1] = '/^,/';              $replaces[1] = '';
$patterns[2] = '/,$/';              $replaces[2] = '';
$patterns[3] = '/\b,\b/';           $replaces[3] = ',&nbsp;';
$patterns[4] = '/\s,/';             $replaces[4] = ',&nbsp;';

ОБНОВЛЕНИЕ: Я даже пытался изменить Парана на Парана

Минас-Жерайс, Риу-Гранди-ду

Сул, Санта

Катарина, Парана, Сан

Пауло

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Не используйте &nbsp; в качестве замены.wordwrap() считает, что 6 символов.Он не интерпретирует сущность HTML.Вот почему твои строки ломаются до смешного.Если вы хотите &nbsp; заменить пробелы после wordwrap()

Кроме того, ваш первый шаблон должен быть:

// match one or more commas together
$patterns[0] = '/,+/';
0 голосов
/ 05 мая 2011

Действительно ли wordwrap() необходим? Похоже, вы рендерите этот контент в ячейку таблицы некоторой фиксированной ширины, и вы не хотите, чтобы отдельные записи разделялись по строкам.

Если этот вывод верен - и если ни одна из ваших записей на самом деле не настолько длинна, что принудительное его размещение в одной строке нарушит ваш макет - тогда как насчет этого: explode() на запятых в массиве, удалить только пробелы замените обычные пробелы в каждой записи массива на &nbsp;, а implode() верните на , (запятая, за которой следует пробел). Затем пусть браузер рендеринга разбивает строки там, где ему нужно.

...