Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   ereg-обрезание :) (http://www.flasher.ru/forum/showthread.php?t=49552)

Crazy 27.09.2003 09:03

Цитата:

Оригинал написал(а) kompadre
Wordwrap специально создан для того что хочет афтор топика
Да. Но создан криво. Настолько криво, что пользоваться им можно только от полной безысходности.

Nirva 27.09.2003 10:49

поясни, крейзи, убдь добр

kompadre 27.09.2003 10:49

Криво ? Интересно ...

После длительного анализа постулатов 1, 2, 3 (постулаты правильные) паралельно проанализируем-ка постулат который стоял перед разроботчиками ПХП - разбить большие слова дабы они не ломали ХТМЛь оформление.

Пример на верху - текстареа в которую помещаеться максимум 10 букв. Что делать ? Разбить большие слова на маленькие. Вопрос стоит - "где бить" ?

Самый быстрый вариант - разбить "in fraganti" - где видим буквы вместе больше максимума, там и режим . Но чем это кривее чем разбить учитывая все константы ? Все равно слово битое получаеться, как не крути. Да и читаться лучше будет. Читатель не подсознательно привыкает к правилам оформления. Вот и привыкнек врапу после 10 букв подряд. А в твоем варианте врап будет вылезать визально "где попало".

Или я опять недопонял ?

Покажи альтернативу, напиши функцию врапа со всеми постулатами.

Crazy 27.09.2003 13:59

Цитата:

Оригинал написал(а) kompadre
Покажи альтернативу, напиши функцию врапа со всеми постулатами.
Легко:

PHP код:

<?php

define
('MAX_WORD_LEN',21);
define('MAX_PART_LEN',15);
define('MIN_PART_LEN',4);

function 
split_long_words($text) {
  return 
preg_replace_callback('/([^ \t\r\n-]{'.MAX_WORD_LEN.',})/','_split_long_word',$text);
}

function 
_split_long_word($matched) {
  
$word = $matched[1];
  
$temp = '';
  
$charsLeft = strlen($word);
  
$offset = 0;
  while (
$charsLeft>0) {
    if (
$charsLeft>MAX_PART_LEN)
      if (
$charsLeft-MAX_PART_LEN>=MIN_PART_LEN)
        
$partLen = MAX_PART_LEN;
      else
        
$partLen = $charsLeft-MIN_PART_LEN;
    else
      
$partLen = $charsLeft;
    
$temp .= ' '.substr($word,$offset,$partLen);
    
$offset += $partLen;
    
$charsLeft -= $partLen;
  }
  return 
substr($temp,1);
}

$text = "дизоксирибонуклеиновая кислота";

$text1 = split_long_words($text);

echo 
"\n--------------\n$text1";

$text2 = wordwrap($text,MAX_WORD_LEN," ",1);

echo 
"\n--------------\n$text2";

?>

Выдача:

Код:

--------------
дизоксирибонукл еиновая кислота
--------------
дизоксирибонуклеинова я кислота

Отрыв одиночной буквы -- однозначно хуже, чем оторвать фрагмент заметного размера.

Далее: за 10 минут можно научить скрипт находить сравнительно удобные места для резки, чтобы результат меньше царапал ухо. Но обычно сие не требуется.

Nirva 27.09.2003 14:29

*офигел, слов нет*

kompadre 27.09.2003 18:07

Хорошо

nagash 27.09.2003 18:42

=)


Часовой пояс GMT +4, время: 18:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.