wordwrap php не работает
Я пытаюсь сломать строку после 20 символов, которые я показываю из базы данных mysql, но это ничего не ломает.
что я получаю
что мне нужно
3 ответа
Я пытаюсь вытащить строку из моего mysql DB и использовать рабочую, чтобы добавить к ней теги
. Но это не работает и я не могу понять почему if(mysql_num_rows($res))< echo '
У меня есть многострочный textbox в моей форме Windows. Я пишу очень длинную строку, разделенную ‘\r’. WHen я установил wordwrap = true, она обертывается, как и ожидалось. BUT когда я устанавливаю wordwrap в false, он также сворачивается, но после большей длины. Однако я вовсе не хочу, чтобы он.
Вы пропускаете аргумент cut для wordwrap.
Ссылка PHP для wordwrap находится здесь
Попробуйте style=»word-break: break-all;» или, может быть, overflow:hidden
по умолчанию wordwrap не разбивает слова, вам нужно добавить true в качестве параметра в конец, чтобы разделить слова — дополнительные сведения см. На странице руководства
Похожие вопросы:
Я пытаюсь использовать wordwrap() , чтобы разбить текст, но я не хочу, чтобы он разбивал текст каждый раз, когда он достигает определенной длины, я хочу, чтобы он разбивал только те слова, которые.
У меня есть этот сценарий php, который отлично справляется с этой работой. Однако результат, который печатается, находится на одной единственной строке, и мне нужно, чтобы он был с wordwrap.
можно ли с помощью wordwrap php добавлять увеличенный отступ к каждому разрыву строки, чтобы по существу создать wordwrap под углом?
Я пытаюсь вытащить строку из моего mysql DB и использовать рабочую, чтобы добавить к ней теги
. Но это не работает и я не могу понять почему if(mysql_num_rows($res))< echo '
У меня есть многострочный textbox в моей форме Windows. Я пишу очень длинную строку, разделенную ‘\r’. WHen я установил wordwrap = true, она обертывается, как и ожидалось. BUT когда я устанавливаю.
У меня есть проблема при использовании функции wordwrap() в php, например, с китайскими иероглифами. Когда параметр $cut в функции wordwrap имеет значение true, он разрушает строку, вставляя.
Я хочу, чтобы php подсчитал символы в заголовке моего сообщения WordPress, и если он превышает 50, вставьте разрыв перед словом, в которое попадает 50-й символ. Для этого, я думаю, wordwrap -лучший.
Я получил упражнение от своего университета. Мы сделали сайт с PHP в Netbeans, с базой данных и все такое. Теперь у меня проблема. Я должен ввести имя, скажем Germany, которое сохранит это имя в.
Я застрял, застрял, застрял. Я пишу класс, который нуждается в методе, и я не могу найти решение, которое полностью проходит все модульные тесты, которые я написал, Есть небольшие ошибки с каждым.
Для генератора iCal, над которым я работаю, мне нужно убедиться, что каждые 75 символов строка разбивается следующим образом: $string = This is a long text. I use this text to demonstrate the PHP.
Источник
Wordwrap php не работает
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel
Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.
Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо
После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..
Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.
Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.
На последок как оно происходит на форумах
Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.
Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12
Источник
Wordwrap php не работает
Есть обрезка строки:
В utf-8 с русскими символами работает , но режет русские символы по длине $n/2
Нашел рабочий вариант с использованием iconv():
Таким способом функция режет русские символы по длине $n/4
Подскажите что можно сделать чтоб и русские символы и все остальные резать одинаково. И как рациональнее это сделать.
Зарание спасибо.
_____________
Процесс написания своего велосипеда повышает профессиональный уровень программиста.
Цитата (aH6y @ 14.12.2010 — 03:56) |
$mes = iconv(«cp1251», «UTF-8», $mes); $mes = wordwrap($mes, $n, » «, 1); $mes = iconv(«UTF-8», «cp1251», $mes); |
kirik
Я знаю, просто привёл пример того, что Я искал.
_____________
Процесс написания своего велосипеда повышает профессиональный уровень программиста.
Очень странно, что это вообще работает , имхо надо такВ мануале слишком жестоко, что буде если текст размера хотя бы в несколько метров.
linker
Пример не мой
kirik
Спасибо работает
_____________
Процесс написания своего велосипеда повышает профессиональный уровень программиста.
Цитата |
php мануал наш друг и брат |
Не в этом случае.
Та функция
а) большая
б) ресурсоемкая (посимвольный анализ для php зло)
в) не работает 🙂
Вот полный аналог для utf-8
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться — его святое право.
Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
twin
Спасибо
Твоя функция в 20 раз быстрее)
_____________
Процесс написания своего велосипеда повышает профессиональный уровень программиста.
aH6y
Ты проверял? Кинь отчет по скорости =)
_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
inpost
Ну да проверил. Примерно в 20 раз быстрее вариант twin’a
_____________
Процесс написания своего велосипеда повышает профессиональный уровень программиста.
aH6y
так и дождёшься от «таких» людей отчета, прийдется идти самому проверять!
_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
inpost
Я тебе ничего не должен.
_____________
Процесс написания своего велосипеда повышает профессиональный уровень программиста.
aH6y
это понятно, тебя что-то переклинило в мою сторону, и ты без повода какой-то дикий, бросаешься на меня. А вот по нормальному попросил показать код проверки, нет, снова таки своё «я». Твоё дело, сам проверю. А в чужие тараканы лезть не буду, захочешь, сам напишешь в ЛС, какие у тебя ко мне проблемы.
_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Гы. Вот теперь он точно нам друг.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться — его святое право.
Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
twin
Пришлось изменить т.к. функция работала некорректно.
_____________
Процесс написания своего велосипеда повышает профессиональный уровень программиста.
Источник
wordwrap
(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)
wordwrap — Переносит строку по указанному количеству символов
Описание
Переносит строку по указанному количеству символов.
Список параметров
Количество символов, по которым строка будет перенесена.
Символ переноса строки можно указать с помощью необязательного параметра break .
Если параметр cut_long_words установлен в true , строка всегда будет переноситься на указанной ширине width или раньше. Поэтому, если исходная строка содержит слово длиннее заданной ширины строки, то оно будет разорвано. (Смотрите второй пример). Если установлен в false , функция не разделяет слово, даже если width меньше длины слова.
Возвращаемые значения
Возвращает строку со вставленными символами переноса на указанной длине.
Примеры
Пример #1 Пример использования wordwrap()
= «The quick brown fox jumped over the lazy dog.» ;
$newtext = wordwrap ( $text , 20 , «
\n» );
Результат выполнения данного примера:
Пример #2 Пример использования wordwrap()
= «A very long woooooooooooord.» ;
$newtext = wordwrap ( $text , 8 , «\n» , true );
Результат выполнения данного примера:
Пример #3 Пример использования wordwrap()
= «A very long woooooooooooooooooord. and something» ;
$newtext = wordwrap ( $text , 8 , «\n» , false );
Результат выполнения данного примера:
Смотрите также
- nl2br() — Вставляет HTML-код разрыва строки перед каждым переводом строки
- chunk_split() — Разбивает строку на фрагменты
User Contributed Notes 22 notes
For those interested in wrapping text to fit a width in *pixels* (instead of characters), you might find the following function useful; particularly for line-wrapping text over dynamically-generated images.
If a word is too long to squeeze into the available space, it’ll hyphenate it as needed so it fits the container. This operates recursively, so ridiculously long words or names (e.g., URLs or this guy’s signature — http://en.wikipedia.org/wiki/Wolfe+585,_Senior) will still keep getting broken off after they’ve passed the fourth or fifth lines, or whatever.
/**
* Wraps a string to a given number of pixels.
*
* This function operates in a similar fashion as PHP’s native wordwrap function; however,
* it calculates wrapping based on font and point-size, rather than character count. This
* can generate more even wrapping for sentences with a consider number of thin characters.
*
* @static $mult;
* @param string $text — Input string.
* @param float $width — Width, in pixels, of the text’s wrapping area.
* @param float $size — Size of the font, expressed in pixels.
* @param string $font — Path to the typeface to measure the text with.
* @return string The original string with line-breaks manually inserted at detected wrapping points.
*/
function pixel_word_wrap ( $text , $width , $size , $font )<
# Passed a blank value? Bail early.
if(! $text ) return $text ;
# Check if imagettfbbox is expecting font-size to be declared in points or pixels.
static $mult ;
$mult = $mult ?: version_compare ( GD_VERSION , ‘2.0’ , ‘>=’ ) ? .75 : 1 ;
# Text already fits the designated space without wrapping.
$box = imagettfbbox ( $size * $mult , 0 , $font , $text );
if( $box [ 2 ] — $box [ 0 ] / $mult $width ) return $text ;
# Start measuring each line of our input and inject line-breaks when overflow’s detected.
$output = » ;
$length = 0 ;
$words = preg_split ( ‘/\b(?=\S)|(?=\s)/’ , $text );
$word_count = count ( $words );
for( $i = 0 ; $i $word_count ; ++ $i )<
# Newline
if( PHP_EOL === $words [ $i ])
$length = 0 ;
# Strip any leading tabs.
if(! $length ) $words [ $i ] = preg_replace ( ‘/^\t+/’ , » , $words [ $i ]);
$box = imagettfbbox ( $size * $mult , 0 , $font , $words [ $i ]);
$m = $box [ 2 ] — $box [ 0 ] / $mult ;
# This is one honkin’ long word, so try to hyphenate it.
if(( $diff = $width — $m ) 0 ) <
$diff = abs ( $diff );
# Figure out which end of the word to start measuring from. Saves a few extra cycles in an already heavy-duty function.
if( $diff — $width 0 ) for( $s = strlen ( $words [ $i ]); $s ; — $s ) <
$box = imagettfbbox ( $size * $mult , 0 , $font , substr ( $words [ $i ], 0 , $s ) . ‘-‘ );
if( $width > ( $box [ 2 ] — $box [ 0 ] / $mult ) + $size ) <
$breakpoint = $s ;
break;
>
>
else <
$word_length = strlen ( $words [ $i ]);
for( $s = 0 ; $s $word_length ; ++ $s ) <
$box = imagettfbbox ( $size * $mult , 0 , $font , substr ( $words [ $i ], 0 , $s + 1 ) . ‘-‘ );
if( $width $box [ 2 ] — $box [ 0 ] / $mult ) + $size ) <
$breakpoint = $s ;
break;
>
>
>
if( $breakpoint ) <
$w_l = substr ( $words [ $i ], 0 , $s + 1 ) . ‘-‘ ;
$w_r = substr ( $words [ $i ], $s + 1 );
$words [ $i ] = $w_l ;
array_splice ( $words , $i + 1 , 0 , $w_r );
++ $word_count ;
$box = imagettfbbox ( $size * $mult , 0 , $font , $w_l );
$m = $box [ 2 ] — $box [ 0 ] / $mult ;
>
>
# If there’s no more room on the current line to fit the next word, start a new line.
if( $length > 0 && $length + $m >= $width ) <
$output .= PHP_EOL ;
$length = 0 ;
# If the current word is just a space, don’t bother. Skip (saves a weird-looking gap in the text).
if( ‘ ‘ === $words [ $i ]) continue;
>
# Write another word and increase the total length of the current line.
$output .= $words [ $i ];
$length += $m ;
>
Another solution to utf-8 safe wordwrap, unsing regular expressions.
Pretty good performance and works in linear time.
function utf8_wordwrap ( $string , $width = 75 , $break = «\n» , $cut = false )
<
if( $cut ) <
// Match anything 1 to $width chars long followed by whitespace or EOS,
// otherwise match anything $width chars long
$search = ‘/(.<1,' . $width . '>)(?:\s|$)|(.<' . $width . '>)/uS’ ;
$replace = ‘$1$2’ . $break ;
> else <
// Anchor the beginning of the pattern with a lookahead
// to avoid crazy backtracking when words are longer than $width
$pattern = ‘/(?=\s)(.<1,' . $width . '>)(?:\s|$)/uS’ ;
$replace = ‘$1’ . $break ;
>
return preg_replace ( $search , $replace , $string );
>
?>
Of course don’t forget to use preg_quote on the $width and $break parameters if they come from untrusted input.
If you’d like to break long strings of text but avoid breaking html you may find this useful. It seems to be working for me, hope it works for you. Enjoy. 🙂
function textWrap ( $text ) <
$new_text = » ;
$text_1 = explode ( ‘>’ , $text );
$sizeof = sizeof ( $text_1 );
for ( $i = 0 ; $i $sizeof ; ++ $i ) <
$text_2 = explode ( ‘ , $text_1 [ $i ]);
if (!empty( $text_2 [ 0 ])) <
$new_text .= preg_replace ( ‘#([^\n\r .]<25>)#i’ , ‘\\1 ‘ , $text_2 [ 0 ]);
>
if (!empty( $text_2 [ 1 ])) <
$new_text .= ‘ . $text_2 [ 1 ] . ‘>’ ;
>
>
return $new_text ;
>
?>
Using wordwrap is usefull for formatting email-messages, but it has a disadvantage: line-breaks are often treated as whitespaces, resulting in odd behaviour including lines wrapped after just one word.
To work around it I use this:
function linewrap ( $string , $width , $break , $cut ) <
$array = explode ( «\n» , $string );
$string = «» ;
foreach( $array as $key => $val ) <
$string .= wordwrap ( $val , $width , $break , $cut );
$string .= «\n» ;
>
return $string ;
>
?>
I then use linewrap() instead of wordwrap()
hope this helps someone
wordwrap() uses the break string as the line break detected, and the break inserted, so your text must be standardized to the line break you want in the wordwrap() output before using wordwrap, otherwise you will get line breaks inserted regardless of the location of existing line breaks in your text.
= ‘
‘ . PHP_EOL ;
$width = 5 ;
$standardized = preg_replace ( ‘/\r?\n/’ , $linebreak , «abc abc abc\nabc abc abc\r\nabc abc abc» );
echo ‘Standardized EOL:’ , PHP_EOL , $standardized , PHP_EOL , PHP_EOL ; // PHP_EOL for the command line, use ‘
‘ for HTML.
echo «Wrapped at $width :» , PHP_EOL , wordwrap ( $standardized , 7 , $linebreak ), PHP_EOL ;
?>
$ php -f test.php
Standardized EOL:
abc abc abc
Wrapped at 5:
abc abc
Here I have come out with a possibly very useful wordwrap code snippet.
Apparently what this piece of code does is: it takes the entered text and looks for words longer than the defined ‘$chunk_length’ if it finds any, it splits the long words and then it concatenates the whole string back to a new string with longer words separated by a dash character in this case.
After it has accomplished this task it then inserts an HTML line break after a specified ‘$line_length’ (Depending on your containers width requirements)
//Start function explode_ wrap
function explode_wrap ( $text , $chunk_length , $line_length )<
//Explode all the words separated by spaces in a string
$string_chunks = explode ( ‘ ‘ , $text );
// Get each split word from the array $sring_chunks_array => key => value
foreach ( $string_chunks as $chunk => $value ) <
if( strlen ( $value ) >= $chunk_length )<
//Split the chunks/words which are longer than $chunk_length
$new_string_chunks [ $chunk ] = chunk_split ( $value , $chunk_length , ‘ — ‘ );
//Do not split the normal length words
$new_string_chunks [ $chunk ] = $value ;
> //End foreach loop
//Concatenate back the all the words
$new_text = implode ( ‘ ‘ , $new_string_chunks );
return wordwrap ( $new_text , $line_length , ‘
‘ );
My old sheep word wrap function (posted at the bottom of this page, is kinda old dated and this one is faster and more accurate).
//the width of the biggest char @
$fontwidth = 11 ;
//each chargroup has char-ords that have the same proportional displaying width
$chargroup [ 0 ] = array( 64 );
$chargroup [ 1 ] = array( 37 , 87 , 119 );
$chargroup [ 2 ] = array( 65 , 71 , 77 , 79 , 81 , 86 , 89 , 109 );
$chargroup [ 3 ] = array( 38 , 66 , 67 , 68 , 72 , 75 , 78 , 82 , 83 , 85 , 88 , 90 );
$chargroup [ 4 ] = array( 35 , 36 , 43 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 60 , 61 , 62 , 63 , 69 , 70 , 76 , 80 , 84 , 95 , 97 , 98 , 99 , 100 , 101 , 103 , 104 , 110 , 111 , 112 , 113 , 115 , 117 , 118 , 120 , 121 , 122 , 126 );
$chargroup [ 5 ] = array( 74 , 94 , 107 );
$chargroup [ 6 ] = array( 34 , 40 , 41 , 42 , 45 , 96 , 102 , 114 , 123 , 125 );
$chargroup [ 7 ] = array( 44 , 46 , 47 , 58 , 59 , 91 , 92 , 93 , 116 );
$chargroup [ 8 ] = array( 33 , 39 , 73 , 105 , 106 , 108 , 124 );
//how the displaying width are compared to the biggest char width
$chargroup_relwidth [ 0 ] = 1 ; //is char @
$chargroup_relwidth [ 1 ] = 0.909413854 ;
$chargroup_relwidth [ 2 ] = 0.728241563 ;
$chargroup_relwidth [ 3 ] = 0.637655417 ;
$chargroup_relwidth [ 4 ] = 0.547069272 ;
$chargroup_relwidth [ 5 ] = 0.456483126 ;
$chargroup_relwidth [ 6 ] = 0.36589698 ;
$chargroup_relwidth [ 7 ] = 0.275310835 ;
$chargroup_relwidth [ 8 ] = 0.184724689 ;
//build fast array
$char_relwidth = null ;
for ( $i = 0 ; $i count ( $chargroup ); $i ++) <
for ( $j = 0 ; $j count ( $chargroup [ $i ]); $j ++) <
$char_relwidth [ $chargroup [ $i ][ $j ]] = $chargroup_relwidth [ $i ];
>
>
//get the display width (in pixels) of a string
function get_str_width ( $str ) <
global $fontwidth , $char_relwidth ;
$result = 0 ;
for ( $i = 0 ; $i strlen ( $str ); $i ++) <
$result += $char_relwidth [ ord ( $str [ $i ])];
>
$result = $result * $fontwidth ;
return $result ;
>
//truncates a string at a certain displaying pixel width
function truncate_str_at_width ( $str , $width , $trunstr = ‘. ‘ ) <
global $fontwidth , $char_relwidth ;
$trunstr_width = get_str_width ( $trunstr );
$width -= $trunstr_width ;
$width = $width / $fontwidth ;
$w = 0 ;
for ( $i = 0 ; $i strlen ( $str ); $i ++) <
$w += $char_relwidth [ ord ( $str [ $i ])];
if ( $w > $width )
break;
>
$result = substr ( $str , 0 , $i ). $trunstr ;
return $result ;
// texas is the reason rules at 10am 🙂
>
?>
Источник