Php если строка длинная

Добавить, если строка слишком длинная. PHP

У меня есть поле описания в моей базе данных MySQL, и я обращаюсь к базе данных на двух разных страницах, на одной странице я отображаю все поле, а на другой я просто хочу отобразить первые 50 символов. Если строка в поле описания меньше 50 символов, она не будет отображаться . но если это не так, я покажу . после первых 50 символов. Пример (полная строка):

Hello, this is the first example, where I am going to have a string that is over 50 characters and is super long, I don't know how long maybe around 1000 characters. Anyway this should be over 50 characters now . 
Hello, this is the first example, where I am going . 

Я просто хочу указать, что многоточие — это символ: ‘…’! = ‘. ‘ и представленный как — person Brett Santore &nbsp schedule 25.11.2015

MySQL предлагает возможность ПОДПИСАТЬ ваши поля, а для многоточия вы можете использовать регистр как: select (case when LENGTH (field) ›50 then CONCAT (SUBSTRING (field, 1, 47), ‘. ‘) else field конец) . — person MediaVince &nbsp schedule 23.03.2016

Ответы (9)

$out = strlen($in) > 50 ? substr($in,0,50).". " : $in; 

Теперь, если элемент имеет фиксированную ширину, браузер автоматически отключится и добавит за вас . .

Я думаю, что css способ увеличит передаваемые данные, что нежелательно для мобильных браузеров. Более того, вы отправляете полный текст, а иногда он должен быть недоступен. — person szamil; 11.02.2014

Основная проблема, с которой я столкнулся с альтернативой CSS, заключается в том, что она не работает для многострочных. Если ваши 50 символов переносятся на 2 строки, что ж, попрощайтесь со второй строкой. Если нет альтернативы, которую я еще не нашел? Надеждыperson Just Plain High; 06.08.2014

Обратите внимание, что для неосновных символов (многобайтовых), таких как á, ň, š, ü, , используйте многобайтовый сейф — mb_substr() вместо substr() — кстати, его можно использовать точно так же — php.net/manual/en/function.mb-substr.php — person jave.web; 30.12.2015

Для многострочного текста вы можете использовать white-space: pre-wrap и фиксированную высоту, примерно в два раза превышающую высоту строки. Таким образом, он покажет . в конце второй строки. У меня работает: 3 — person Keenora Fluffball; 13.02.2017

@JustPlainHigh К сожалению, единственный надежный вариант для многострочных эллипсов переполнения на данный момент — это плагины JavaScript. Тот, который я успешно использовал, — это jQuery github.com/tbasse/jquery-truncate — person Gavin; 10.07.2017

strlen ($ in) ›18? substr ($ in, 0,10) . substr ($ in, -8, 8): $ в; это напечатает строку с первыми 10 символами и последними 8 символами с ‘. ‘ внутри. — person herbertD; 12.12.2017

Читайте также:  Изучение html and css

Было бы не лучше использовать специальный символ… вместо трех подряд. в вашем коде? — person Takit Isy; 28.02.2018

@TakitIsy Вполне возможно, но я все же рекомендую вариант CSS. — person Niet the Dark Absol; 28.02.2018

mb_strimwidth("Hello World", 0, 10, ". "); 
  • Hello World : строка, которую нужно обрезать.
  • 0 : количество символов от начала строки.
  • 10 : длина обрезанной строки.
  • . : добавленная строка в конце обрезанной строки.

Обратите внимание, что 10 — это длина усеченной строки + добавленной строки!

Чтобы избежать усечения слов:

В случае представления отрывков текста, вероятно, следует избегать обрезки слова. Если нет жестких требований к длине усеченного текста, помимо упомянутого здесь wordwrap() , можно использовать следующее для усечения и предотвращения обрезки последнего слова.

$text = "Knowledge is a natural right of every human being of which no one has the right to deprive him or her under any pretext, except in a case where a person does something which deprives him or her of that right. It is mere stupidity to leave its benefits to certain individuals and teams who monopolize these while the masses provide the facilities and pay the expenses for the establishment of public sports."; // we don't want new lines in our preview $text_only_spaces = preg_replace('/\s+/', ' ', $text); // truncates the text $text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50)); // prevents last word truncation $preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " "))); 

В этом случае $preview будет «Knowledge is a natural right of every human being» .

Элегантное решение. Как видно из этих комментариев. Чтобы предотвратить появление пробела между усеченным текстом и многоточием, вы можете использовать rtrim (mb_strimwidth ($ string, 0, 24)) . — person Tod Birdsall; 01.09.2015

Лучший вариант. ИМХО, поскольку CSS — это здорово, но для AJAX иногда нужно обмениваться минимумом данных! — person MediaVince; 23.03.2016

@jim_kastrin многоточие Символ Юникода — это совершенно допустимая строка. — person Dmitri Pisarev; 28.03.2018

@jim_kastrin это не улучшает сути ответа, поэтому мой комментарий был помечен как Off Topic. Но использование трех точек в качестве многоточия является типографским богохульством, что равносильно использованию неправильного написания в ответе. — person Dmitri Pisarev; 29.03.2018

Читайте также:  Linear neural network python

@Dmitri Dmitri Многоточие может не === трех точек, но определенно == трех точек. 🙂 — person Andrew; 27.02.2019

Несмотря на то, что первоначальное замечание о типографике с самого начала было совершенно не по теме, я все же удалил свои предыдущие ответы на этот вопрос, так как считаю, что это не принесет плодов и испортит почти каждый ответ в этом сообществе, если все ответы будут отсканированы. на типографское соответствие. Аргументы по типографике должны быть отдельной темой или метой. — person jim_kastrin; 27.02.2019

@ MartinZvarík это поведение, как описано в руководстве по php: mb_strimwidth — получить усеченную строку с указанной шириной. Это отвечает на вопрос, как показать первые 50 символов. Конечно, в зависимости от варианта использования могут быть предпочтительные решения, но это был исходный вопрос. — person jim_kastrin; 14.06.2020

@ MartinZvarík, кроме того, при предварительном просмотре генетического кода или миниатюрного js-кода нет слов, поэтому он не высечен на камне, это всегда нежелательно. — person jim_kastrin; 14.06.2020

@jim_kastrin Вопрос содержит пример полного предложения . не какой-то генетический код, о котором вы говорите неожиданно — person Martin Zvarík; 14.06.2020

Пользователь @MartinZvarik спрашивает, как «отобразить первые 50 символов», что и составляет суть вопроса. Я привел только примеры использования, чтобы опровергнуть вашу уверенность в том, что это нежелательно. Конечно, если речь идет о предварительном просмотре описания товара в электронной коммерции, то, скорее всего, подойдет wordwrap (), но вопрос не был более конкретным. Поэтому я не могу быть уверен во всех случаях. — person jim_kastrin; 15.06.2020

Поскольку избегание усечения слова может быть обычным явлением, отредактированный ответ, чтобы добавить подход, чтобы избежать усечения слова с другим подходом, чем wordwrap (). Спасибо! — person jim_kastrin; 15.06.2020

Используйте wordwrap() , чтобы обрезать строку без разрывов слов, если строка длиннее 50 символов, и просто добавьте . в конце:

$str = $input; if( strlen( $input) > 50) < $str = explode( "\n", wordwrap( $input, 50)); $str = $str[0] . '. '; >echo $str; 

В противном случае использование решений, которые делают substr( $input, 0, 50); , сломает слова.

Это тоже хорошее решение, поэтому мне не нужно перебивать слова . Спасибо. — person mais-oui; 11.07.2012

NB, этот перенос слов не работает с многобайтовыми символами, и нет встроенной функции mb_wordwrap. — person MarcGuay; 07.09.2016

НИК решение, но в моем случае пользователь поставил дополнительное длинное слово, как jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj — person ahmednawazbutt; 10.01.2021

Читайте также:  Тег IMG

@ahmednawazbutt lol, так что вы должны добавить еще один цикл снаружи — person Akshay kn; 19.01.2021

@Akshaykn нет. Я применил свойство CSS word-break к контейнеру. работал на меня — person ahmednawazbutt; 20.01.2021

 $length) < //limit hit! $string = substr($string,0,($length -3)); if ($stopanywhere) < //stop anywhere $string .= '. '; >else < //stop on a word. $string = substr($string,0,strrpos($string,' ')).'. '; >> return $string; > ?> 

Я много раз использую приведенный выше фрагмент кода.

Я использую это решение на своем сайте. Если $ str короче, чем $ max, он останется без изменений. Если в $ str нет пробелов между первыми символами $ max, он будет жестоко вырезан в позиции $ max. В противном случае после последнего слова будут добавлены 3 точки.

function short_str($str, $max = 50) < $str = trim($str); if (strlen($str) >$max) < $s_pos = strpos($str, ' '); $cut = $s_pos === false || $s_pos >$max; $str = wordwrap($str, $max, ';;', $cut); $str = explode(';;', $str); $str = $str[0] . '. '; > return $str; > 

Это вернет заданную строку с многоточием на основе количества СЛОВ вместо символов:

 $words) < // Extract first X words from string preg_match("/(?:[^\s,\.;\?\!]+(?:[\s,\.;\?\!]+|$))/", $text, $matches); $text = trim($matches[0]); // Let's check if it ends in a comma or a dot. if (substr($text, -1) == ',') < // If it's a comma, let's remove it and add a ellipsis $text = rtrim($text, ','); $text .= '. '; >else if (substr($text, -1) == '.') < // If it's a dot, let's remove it and add a ellipsis (optional) $text = rtrim($text, '.'); $text .= '. '; >else < // Doesn't end in dot or comma, just adding ellipsis here $text .= '. '; >> // Returns "ellipsed" text, or just the string, if it's less than X words wide. return $text; > $description = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quibusdam ut placeat consequuntur pariatur iure eum ducimus quasi perferendis, laborum obcaecati iusto ullam expedita excepturi debitis nisi deserunt fugiat velit assumenda. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt, blanditiis nostrum. Nostrum cumque non rerum ducimus voluptas officia tempore modi, nulla nisi illum, voluptates dolor sapiente ut iusto earum. Esse? Lorem ipsum dolor sit amet, consectetur adipisicing elit. A eligendi perspiciatis natus autem. Necessitatibus eligendi doloribus corporis quia, quas laboriosam. Beatae repellat dolor alias. Perferendis, distinctio, laudantium? Dolorum, veniam, amet!'; echo elipsis($description, 30); ?> 

Источник

Оцените статью