Самое простое решение:
<?php
$text = '
<p>This is the main bit of text</p>
<small> This is some additional text</small>';
$pos = strpos($text,'<p>');
$pos2 = strpos($text,'</p>');
$text = '<p>' . substr($text,$pos+strlen('<p>'),10).substr($text,$pos2);
echo $text;
, но он будет работать только для первой пары <p> ... </p>
Если вам нужно больше, вы можете использовать регулярные выражения:
<?php
$text = '
<p>This is the main bit of text</p>
<small> This is some additional text</small>
<p>
werwerwrewre
</p>';
preg_match_all('#<p>(.*)</p>#isU', $text, $matches);
foreach ($matches[1] as $match) {
$text = str_replace('<p>'.$match.'</p>', '<p>'.substr($match,0,10).'</p>', $text);
}
echo $text;
или даже
<?php
$text = '
<p>This is the main bit of text</p>
<small> This is some additional text</small>
<p>
werwerwrewre
</p>';
$text = preg_replace_callback('#<p>(.*)</p>#isU', function($matches) {
$matches[1] = '<p>'.substr($matches[1],0,10).'</p>';
return $matches[1];
}, $text);
echo $text;
Однако в этих всех 3-х случаях, все белые символы считаются как часть строки, так что если содержание <p>...</p>
начинается с 3-пространства, и вы хотите отобразить только 3 символов, вы просто отображение только 3 места, больше ничего. Конечно, его можно легко изменить, но я упомянул об этом, чтобы заметить этот факт.
И еще одна вещь, вполне возможно, что вам нужно будет использовать многобайтовую версию функций, чтобы получить результат, так, например, вместо strpos()
вы должны использовать mb_strpos()
и установить ранее UTF-8 кодирование с использованием mb_internal_encoding('UTF-8');
, чтобы сделать его работу
вы рассмотрели с помощью Java-плагин, как этот http://tpgblog.com/2009/12/21/threedots-the-jquery-ellipsis-plugin /, вместо этого? В противном случае вы можете вставить часть кода, который вы пробовали в PHP? ($ myText может иметь много абзацев. Как вы знаете, какие длинные ограничения ограничить?) – cornelb
Привет, cornelb, я обновлю свой вопрос, чтобы включить некоторый код. $ myText будет иметь только 1 абзац. – DesignSubway