Подскажите пожалуйста, как вставить строчку в контент после сотого символа?
Да и в чем дело может быть? функция substr ведет себя не очень корректно, кодировки менял.
Цитата |
$a = 'Привет Ринат. Сегодня я расскажу о таком замечательном языке программирования как PHP. '; $b = 'Этот язык содержит множество интересных функций.'; $c = $a.$b; $c = substr("$c", 0,10); echo $c; |
Цитата |
Приве |
string substr ( string $string , int $start [, int $length ] )
Returns the portion of string specified by the start and length parameters.
$a = "какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов";
$start = substr($a, 0, 100);
$last = substr($a, 100);
$str = "текст который нужно вставить";
$result = $start.$str.$last;
Цитата |
Почитал фак, что с кириллицей отдельный разговор |
$text = "какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов";
$intext = " OLOLOLOLOLOLO ";
$ftext=substr_replace($text,substr($text,0,100).$intext,0,100);
echo $ftext;
Цитата |
$ftext=substr_replace($text,substr($text,0,100).$intext,0,100); |
$text = "какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов";
$intext = " OLOLOLOLOLOLO ";
echo preg_replace("#(.{100})#iu", '$1'.$intext, $text);
$ins = '<!--more-->';
$after = 200;
$lenhIns = mb_strlen($content, 'UTF-8');
$lenStr = mb_strlen($content, 'UTF-8');
$first = mb_substr($content, 0, $after, 'UTF-8');
$firstP = mb_substr($content, $after, $lenIns, 'UTF-8');
$secP = mb_substr($content, $after, $lenStr, 'UTF-8');
$content = substr_replace($content, $first . $firstP . $ins . $secP, 0);
$content = str_replace(array("\r","\n"),"", $content);
Цитата (Winston @ 19.10.2011 - 09:42) |
Можно так еще$text = "какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов"; |
какая-то строка в которой больше 100 символов-то строка в которой больше 100 символов-то строка в ко OLOLOLOLOLOLO торой больше 100 символов-то строка в которой больше 100 символов-то строка в которой больше 100 сим OLOLOLOLOLOLO волов-то строка в которой больше 100 символов-то строка в которой больше 100 символов-то строка в ко OLOLOLOLOLOLO торой больше 100 символов-то строка в которой больше 100 символов-то строка в которой больше 100 сим OLOLOLOLOLOLO волов-то строка в которой больше 100 символов-то строка в которой больше 100 символов-то строка в ко OLOLOLOLOLOLO торой больше 100 символов-то строка в которой больше 100 символов-то строка в которой больше 100 сим OLOLOLOLOLOLO волов-то строка в которой больше 100 символов-то строка в которой больше 100 символов-то строка в ко OLOLOLOLOLOLO торой больше 100 символов-то строка в которой больше 100 символов-то строка в которой больше 100 сим OLOLOLOLOLOLO волов-то строка в которой больше 100 символов-то строка в которой больше 100 символов-то строка в ко OLOLOLOLOLOLO торой больше 100 символов-то строка в которой больше 100 символов-то строка в которой больше 100 сим OLOLOLOLOLOLO волов-то строка в которой больше 100 символов-то строка в которой больше 100 символов какая-то строк OLOLOLOLOLOLO а в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в кото OLOLOLOLOLOLO рой больше 100 символов какая-то строка в которой больше 100 символов
Цитата (Draftpad @ 19.10.2011 - 07:59) |
Хмммм, ну вообще, можно сделать ещё более грамотно:$text = "какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов"; Если же нужно вставлять после КАЖДОГО 100-го символа, тогда ещё проще, одной функцией wordwrap() |
Цитата (veleog @ 28.10.2011 - 21:48) |
Если большой текст, то выдает следующее |
echo preg_replace("#(.{100})#isu", '$1'.$intext, $text, 1);
Цитата (veleog @ 28.10.2011 - 21:38) |
Другой вопрос, как вставиь '<!--more-->' перед первым встречающимся тегом <p> после 200 символа? |
$text = "какая-то строка в которой больше 200 символов какая-то строка в которой
больше 200 символов какая-то строка в которой больше 200 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 200 символов
больше 200 символов <p> какая-то строка в </p>которой больше 200 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 200 символов
больше 200 символов какая-то строка в которой больше 200 символов какая-то <p>строка в которой больше </p>100 символов какая<p>-то </p>строка в которой больше 200 символов";
echo preg_replace("#(<p>)#isu", '<!--more-->$1', mb_substr($text, 200, mb_strlen($text, 'UTF-8'), 'UTF-8'), 1);
Цитата |
global $content; $ins = '<!--more--><p>'; $after = 300; $lenhIns = mb_strlen($content, 'UTF-8'); $lenStr = mb_strlen($content, 'UTF-8'); $first = mb_substr($content, 0, $after, 'UTF-8'); $firstP = mb_substr($content, $after, $lenIns, 'UTF-8'); $secP = mb_substr($content, $after, $lenStr, 'UTF-8'); $secP = preg_replace("!<p>!si","<!--more--><p>",$secP,1); $content = substr_replace($content, $first . $firstP . $secP, 0); $content = str_replace(array("\r","\n"),"", $content); |
Цитата (v.ru.n32 @ 28.10.2011 - 19:37) |
а зачем те вперся вообще вставлять строчку после 100 символа в контекст? может че другое придумаем. ты объясни зачем те это ) |
Цитата (veleog @ 28.10.2011 - 23:03) |
Все сделал, всем спасибо. |
Цитата (Winston @ 28.10.2011 - 19:28) | ||||
Дык ты бы сразу сказал, что надо только 1 замену..., тогда так напиши echo preg_replace("#(.{100})#isu", ''.$intext, $text, 1); И будет только одна замена после 100-го символа.
Вот так Свернутый текст $text = "какая-то строка в которой больше 200 символов какая-то строка в которой |
$text = "какая-то строка в которой больше 200 символов какая-то строка в которой
больше 200 символов какая-то строка в которой больше 200 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 200 символов
больше 200 символов <p> какая-то строка в </p>которой больше 200 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 200 символов
больше 200 символов какая-то строка в которой больше 200 символов какая-то <p>строка в которой больше </p>100 символов какая<p>-то </p>строка в которой больше 200 символов";
$ins = '<!--more-->';
echo preg_replace("#(<p>)#isu", mb_substr($text, 0, 200, 'UTF-8').$ins.'$1', mb_substr($text, 200, mb_strlen($text, 'UTF-8'), 'UTF-8'), 1);
Цитата (veleog @ 28.10.2011 - 23:16) |
В последнем примере, все обрезается и соединяется не той последовательности. |
Цитата |
echo preg_replace("#(<p>)#isu", mb_substr($text, 0, 200, 'UTF-8').$ins.'$1', mb_substr($text, 0, mb_strlen($text, 'UTF-8'), 'UTF-8'), 1); |
function insertMore( $text, $cut = 0 )
{
$text = iconv( 'utf-8', 'windows-1251', $text );
$array = str_split( $text, $cut );
$result = array();
foreach($array as $count => $line)
{
if ( !$count )
$result[] = $line.'<!--more-->';
else
$result[] = $line;
}
$result = implode( '', $result );
return iconv( 'windows-1251', 'utf-8', $result );
}
$str = 'кая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов';
$str_more = insertMore( $str, 100 );
echo $str_more;
кая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то с<!--more-->трока в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов
Цитата (veleog @ 28.10.2011 - 23:47) |
Хотя нет)) дальше ковыряю |
function insertMore( $text, $cut = 0, $tag = '' )
{
$text = iconv( 'utf-8', 'windows-1251', $text );
$array = str_split( $text, $cut );
$result = array();
foreach($array as $count => $line)
{
if ( !$count )
{
if (preg_match('~'.$tag.'~iUs', $line) && $tag != '')
{
$test_tag = explode( $tag, $line);
$test_tag[0] = $test_tag[0].'<!--more-->';
$test_tag = implode( $tag, $test_tag );
$result[] = $test_tag;
}
else
$result[] = $line.'<!--more-->';
}
else
$result[] = $line;
}
$result = implode( '', $result );
return iconv( 'windows-1251', 'utf-8', $result );
}
$str = 'кая-то строка в которой больше 100 <p>символов какая-то строка</p> в которой <p>больше 100 символов</p> какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов';
$posts = insertMore( $str, 200, '<p>' );
echo $posts;
кая-то строка в которой больше 100 <!--more--><p>символов какая-то строка</p> в которой <p>больше 100 символов</p> какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов какая-то строка в которой больше 100 символов
Цитата (Winston @ 28.10.2011 - 21:13) | ||
Что не так ? walerus Жесть При том, ему нужно взять текст от 200-го символа, и вставить коммент перед первым параграфом (<p>) |
Цитата |
$len = 400; $lenhIns = mb_strlen($content, 'UTF-8'); $lenStr = mb_strlen($content, 'UTF-8'); $first = mb_substr($content, 0, $len, 'UTF-8'); $firstP = mb_substr($content, $len, $lenIns, 'UTF-8'); $secP = mb_substr($content, $len, $lenStr, 'UTF-8'); $secP = preg_replace("!<p>!si","<!--more--><p>",$secP,1); $content = substr_replace($content, $first . $firstP . $secP, 0); |
$text = "Истоки PHP лежат в старом продукте, имев<p>шем название PHP/FI. PHP/FI был созд</p>ан Расмусом Лердорфом в 1995 году и представлял собой набор Perl-скриптов для ведения статистики посещений его резюме. Развитие web еще только начиналось, никаких специальных средств для решения этих задач не было, и к автору хлынул поток сообщений с вопросами. Лердорф начал бесплатно раздавать свой инструментарий, названный «Personal Homepages Tools» (PHP) - («Инстр<p>ументы для персональных домашних страниц»). Очень</p> скоро потребовалась большая функциональность и Ра<p>смус пишет нову</p>ю, намного более обширную версию на C, работающую с базами данных и позволяющую пользователям разрабатывать простейшие web-приложения. Расмус Лердорф решил выложить исходный код PHP/FI на всеобщее обозрение, исправление ошибок и дополнение.";
$ins = '<!--more-->';
$count = 200;
$first = mb_substr($text, 0, $count, 'UTF-8');
echo $first . preg_replace("#(<p>)#isu", $ins.'$1', mb_substr($text, $count, (mb_strlen($text, 'UTF-8')), 'UTF-8'), 1);