Что такое код substr_replace


Содержание

Функция PHP substr_replace ()

примеров

«Hello» заменить «мир»:

Определение и использование

Функция substr_replace () заменяет часть строки с другой строкой.

Примечание: Если начальный аргумент отрицательный , а длина меньше или равен начальному, то длина равна нулю.

Примечание: Эта функция двоичного кода безопасности.

грамматика

参数 描述
string 必需。规定要检查的字符串。
replacement 必需。规定要插入的字符串。
start 必需。规定在字符串的何处开始替换。
  • 正数 — 在字符串的指定位置开始
  • 负数 — 在从字符串结尾的指定位置开始
  • 0 — 在字符串中的第一个字符处开始
length 可选。规定要替换多少个字符。默认是与字符串长度相同。
  • 正数 — 被替换的字符串长度
  • 负数 — 从字符串末端开始的被替换字符数
  • 0 — 插入而非替换

технические детали

Возвращает: Возвращает строку, чтобы заменить. Если строка представляет собой массив, массив возвращается.
Версия PHP: 4 +
Журнал обновления: Начиная с PHP 4.3.3 и далее, все параметры принимаются массивы.

Другие примеры

Пример 1

Заменить старт с 6-ю позицию в строке ( «мир» заменен на «земле»):

Пример 2

Заменить начало с 5-го конца позиции строки ( «мир» заменить на «земле»):

Пример 3

В начале «мира» вставить «Hello»:

Пример 4

Заменить несколько строк сразу. Каждая строка «ААА» заменить «ВВВ»:

substr_replace()

Синтаксис:

substr_replace(string, replacement, start[, length])

Поддерживается следующими версиями PHP:

Описание функции:

Функции substr_replace() заменяет часть строки другой строкой.

Обязательный аргумент. Строка в которой будет произведена замена.

string, array replacement Обязательный аргумент. Строка с данными для замены. string, array start

Обязательный аргумент. Позиция с которой начнется замена.

Если start положительное число, то замена начнется с символа с порядковым номером start слева.

Если start отрицательное число, то тогда начальная позиция для замены будет отсчитывается справа.

Нумерация начинается с нуля.

Если позиция start превышает количество символов в строке, то вставка будет сделана в конце строки.

int length

Необязательный аргумент. Определяет количество символов для замены.

Если length положительное число, то будет заменено length символов с позиции start .

Если length отрицательное число, то будет заменен участок с позиции start до символа порядковым номером length отсчитанным справа.

По умолчанию происходит замена до конца строки.

Примеры:

Пример 1:

echo substr_replace(«Привет Вова»,»Дима»,7);
?>

Пример 2:

В этом примере будет сделана вставка в начале строки.

$a=’15 июля’;
echo substr_replace($a,»Сегодня «,0,0);
?>

Сегодня 15 июля

Пример 3:

В этом примере показано использования отрицательного length и start .

$a=’Сегодня 15 июля’;
echo substr_replace($a,»16″,8,2);
echo «
«;
echo substr_replace($a,»16″,8,-5);
echo «
«;
echo substr_replace($a,»16″,-7,-5);
?>

Сегодня 16 июля
Сегодня 16 июля
Сегодня 16 июля

Пример 4:

В этом примере будет сделана вставка в конец строки.

$a=’Сегодня 15 июля ‘;
echo substr_replace($a,»16″,200);
?>

Сегодня 15 июля 16

Пример 4:

В этом примере будет показана работа substr_replace() с массивами

$a = array(‘A: Игорь’, ‘B: Вова’, ‘C: Саша’);
Print_r(substr_replace($a,’****’,3));
echo «
«;
$b = array(‘Иванов’, ‘Петров’, ‘Сидоров’);
Print_r(substr_replace($a,$b,3));
?>

Array ( [0] => A: **** [1] => B: **** [2] => C: **** )
Array ( [0] => A: Иванов [1] => B: Петров [2] => C: Сидоров )

String. Replace Метод

Определение

Возвращает новую строку, в которой все вхождения заданного знака Юникода или String в текущей строке заменены другим заданным знаком Юникода или String. Returns a new string in which all occurrences of a specified Unicode character or String in the current string are replaced with another specified Unicode character or String.

Перегрузки

Возвращает новую строку, в которой все вхождения заданной строки в текущем экземпляре заменены другой заданной строкой с использованием указанных языка и региональных параметры, а также учета регистра. Returns a new string in which all occurrences of a specified string in the current instance are replaced with another specified string, using the provided culture and case sensitivity.

Возвращает новую строку, в которой все вхождения заданного знака Юникода в текущем экземпляре заменены другим заданным знаком Юникода. Returns a new string in which all occurrences of a specified Unicode character in this instance are replaced with another specified Unicode character.

Возвращает новую строку, в которой все вхождения заданной строки в текущем экземпляре заменены другой заданной строкой. Returns a new string in which all occurrences of a specified string in the current instance are replaced with another specified string.

Возвращает новую строку, в которой все вхождения заданной строки в текущем экземпляре заменены другой заданной строкой с использованием указанного типа сравнения. Returns a new string in which all occurrences of a specified string in the current instance are replaced with another specified string, using the provided comparison type.

Replace(String, String, Boolean, CultureInfo)

Возвращает новую строку, в которой все вхождения заданной строки в текущем экземпляре заменены другой заданной строкой с использованием указанных языка и региональных параметры, а также учета регистра. Returns a new string in which all occurrences of a specified string in the current instance are replaced with another specified string, using the provided culture and case sensitivity.

Параметры

Строка, которую требуется заменить. The string to be replaced.

Строка для замены всех вхождений oldValue . The string to replace all occurrences of oldValue .

Значение true , чтобы регистр при сравнении игнорировался; в противном случае значение false . true to ignore casing when comparing; false otherwise.

Язык и региональные параметры, используемые при сравнении. The culture to use when comparing.

Возвраты

Строка, эквивалентная текущей строке, но с тем отличием, что все вхождения oldValue заменены на newValue . A string that is equivalent to the current string except that all instances of oldValue are replaced with newValue . Если oldValue не обнаружен в текущем экземпляре метод возвращает текущий экземпляр без изменений. If oldValue is not found in the current instance, the method returns the current instance unchanged.

Исключения

oldValue — null . oldValue is null .

oldValue является пустой строкой («»). oldValue is the empty string («»).

Комментарии

Если newValue имеет значение null , удаляются все вхождения oldValue . If newValue is null , all occurrences of oldValue are removed.

Этот метод не изменяет значение текущего экземпляра. This method does not modify the value of the current instance. Вместо этого возвращается новая строка, в которой все вхождения oldValue заменяются newValue . Instead, it returns a new string in which all occurrences of oldValue are replaced by newValue .

Этот метод выполняет поиск oldValue , используя указанные culture и ignoreCase учет регистра. This method performs a search to find oldValue using the provided culture and ignoreCase case sensitivity.

Поскольку этот метод возвращает измененную строку, можно объединить последовательные вызовы метода Replace, чтобы выполнить несколько замен для исходной строки. Because this method returns the modified string, you can chain together successive calls to the Replace method to perform multiple replacements on the original string. Вызовы методов выполняются слева направо. Method calls are executed from left to right. Ниже приведен пример. The following example provides an illustration.

Replace(Char, Char)

Возвращает новую строку, в которой все вхождения заданного знака Юникода в текущем экземпляре заменены другим заданным знаком Юникода. Returns a new string in which all occurrences of a specified Unicode character in this instance are replaced with another specified Unicode character.

Параметры

Заменяемый знак Юникода. The Unicode character to be replaced.

Знак Юникода для замены всех обнаруженных вхождений oldChar . The Unicode character to replace all occurrences of oldChar .

Возвраты

Строка, эквивалентная данному экземпляру, но с тем отличием, что все вхождения oldChar заменены на newChar . A string that is equivalent to this instance except that all instances of oldChar are replaced with newChar . Если oldChar не обнаружен в текущем экземпляре метод возвращает текущий экземпляр без изменений. If oldChar is not found in the current instance, the method returns the current instance unchanged.

Илон Маск рекомендует:  Основы jQuery

Примеры

В следующем примере создается список значений с разделителями-запятыми путем замены запятыми пробелов между сериями чисел. The following example creates a comma separated value list by substituting commas for the blanks between a series of numbers.

Комментарии

Для поиска oldChar этот метод выполняет поиск по порядковому номеру (с учетом регистра и без учета языка и региональных параметров). This method performs an ordinal (case-sensitive and culture-insensitive) search to find oldChar .

Этот метод не изменяет значение текущего экземпляра. This method does not modify the value of the current instance. Вместо этого возвращается новая строка, в которой все вхождения oldChar заменяются newChar . Instead, it returns a new string in which all occurrences of oldChar are replaced by newChar .

Поскольку этот метод возвращает измененную строку, можно объединить последовательные вызовы метода Replace, чтобы выполнить несколько замен для исходной строки. Because this method returns the modified string, you can chain together successive calls to the Replace method to perform multiple replacements on the original string. Вызовы методов выполняются слева направо. Method calls are executed from left to right. Ниже приведен пример. The following example provides an illustration.

Дополнительно

Replace(String, String)

Возвращает новую строку, в которой все вхождения заданной строки в текущем экземпляре заменены другой заданной строкой. Returns a new string in which all occurrences of a specified string in the current instance are replaced with another specified string.

Параметры

Строка, которую требуется заменить. The string to be replaced.

Строка для замены всех вхождений oldValue . The string to replace all occurrences of oldValue .

Возвраты

Строка, эквивалентная текущей строке, но с тем отличием, что все вхождения oldValue заменены на newValue . A string that is equivalent to the current string except that all instances of oldValue are replaced with newValue . Если oldValue не обнаружен в текущем экземпляре метод возвращает текущий экземпляр без изменений. If oldValue is not found in the current instance, the method returns the current instance unchanged.

Исключения

oldValue — null . oldValue is null .

oldValue является пустой строкой («»). oldValue is the empty string («»).

Примеры

В следующем примере показано, как можно использовать метод Replace для исправления орфографической ошибки. The following example demonstrates how you can use the Replace method to correct a spelling error.

Комментарии

Если newValue имеет значение null , удаляются все вхождения oldValue . If newValue is null , all occurrences of oldValue are removed.

Этот метод не изменяет значение текущего экземпляра. This method does not modify the value of the current instance. Вместо этого возвращается новая строка, в которой все вхождения oldValue заменяются newValue . Instead, it returns a new string in which all occurrences of oldValue are replaced by newValue .

Для поиска oldValue этот метод выполняет поиск по порядковому номеру (с учетом регистра и без учета языка и региональных параметров). This method performs an ordinal (case-sensitive and culture-insensitive) search to find oldValue .

Поскольку этот метод возвращает измененную строку, можно объединить последовательные вызовы метода Replace, чтобы выполнить несколько замен для исходной строки. Because this method returns the modified string, you can chain together successive calls to the Replace method to perform multiple replacements on the original string. Вызовы методов выполняются слева направо. Method calls are executed from left to right. Ниже приведен пример. The following example provides an illustration.

Дополнительно

Replace(String, String, StringComparison)

Возвращает новую строку, в которой все вхождения заданной строки в текущем экземпляре заменены другой заданной строкой с использованием указанного типа сравнения. Returns a new string in which all occurrences of a specified string in the current instance are replaced with another specified string, using the provided comparison type.

Параметры

Строка, которую требуется заменить. The string to be replaced.

Строка для замены всех вхождений oldValue . The string to replace all occurrences of oldValue .

Одно из значений перечисления, определяющее способ поиска oldValue в пределах экземпляра. One of the enumeration values that determines how oldValue is searched within this instance.

Возвраты

Строка, эквивалентная текущей строке, но с тем отличием, что все вхождения oldValue заменены на newValue . A string that is equivalent to the current string except that all instances of oldValue are replaced with newValue . Если oldValue не обнаружен в текущем экземпляре метод возвращает текущий экземпляр без изменений. If oldValue is not found in the current instance, the method returns the current instance unchanged.

Исключения

Свойство oldValue имеет значение null . oldValue is null .

oldValue является пустой строкой («»). oldValue is the empty string («»).

Комментарии

Если newValue имеет значение null , удаляются все вхождения oldValue . If newValue is null , all occurrences of oldValue are removed.

Этот метод не изменяет значение текущего экземпляра. This method does not modify the value of the current instance. Вместо этого возвращается новая строка, в которой все вхождения oldValue заменяются newValue . Instead, it returns a new string in which all occurrences of oldValue are replaced by newValue .

Этот метод выполняет поиск oldValue с использованием языка и региональных параметров и чувствительности к регистру, описанной comparisonType . This method performs a search to find oldValue using the culture and case sensitivity described by comparisonType .

Поскольку этот метод возвращает измененную строку, можно объединить последовательные вызовы метода Replace, чтобы выполнить несколько замен для исходной строки. Because this method returns the modified string, you can chain together successive calls to the Replace method to perform multiple replacements on the original string. Вызовы методов выполняются слева направо. Method calls are executed from left to right. Ниже приведен пример. The following example provides an illustration.

Функция substr_replace возвращает странные символы вместе со строкой

Я имею переменную с некоторой строкой в ней, например:

То, что я хочу сделать, — это «ввести» перед последним словом одну кавычку ( ‘ ), чтобы выход был следующим:

У меня есть этот код:

И это работает хорошо. Единственная проблема заключается в том, что когда я пытаюсь реализовать ее на другом языке (иврите в этом случае), я получаю дополнительные символы. Например, для этого входа:

עברית Я ожидаю результата: עברי’ת но вместо этого я получаю это в результате: עברי ‘

FPublisher

Web-технологии: База знаний

Документация PHP

substr_replace

substr_replace — Заменяет часть строки

Описание

string substr_replace ( string $string , string $replacement , int $start [, int $length ] )

substr_replace() заменяет часть строки string начинающуюся с символа с порядковым номером start и длиной length строкой replacement и возвращает результат.

Если start — положительное число, замена начинается с символа с порядковым номером start .

Если start — отрицательное число, замена начинается с символа с порядковым номером start , считая от конца строки.

Если аргумент length — положительное число, то он определяет длину заменяемой подстроки. Если этот аргумент отрицательный, он определяет количество символов от конца строки, на котором заканчивается замена. Этот аргумент необязателен и по умолчанию равен strlen( string );, т.е. замена до конца строки string .

Пример #1 Пример использования substr_replace()

= ‘ABCDEFGH:/MNRPQR/’ ;
echo «Оригинал: $var \n» ;

/* Обе следующих строки заменяют всю строку $var на ‘bob’. */
echo substr_replace ( $var , ‘bob’ , 0 ) . «
\n» ;
echo substr_replace ( $var , ‘bob’ , 0 , strlen ( $var )) . «
\n» ;

/* Вставляет ‘bob’ в начало $var. */
echo substr_replace ( $var , ‘bob’ , 0 , 0 ) . «
\n» ;

/* Обе следующих строки заменяют ‘MNRPQR’ in $var на ‘bob’. */
echo substr_replace ( $var , ‘bob’ , 10 , — 1 ) . «
\n» ;
echo substr_replace ( $var , ‘bob’ , — 7 , — 1 ) . «
\n» ;

/* Удаляет ‘MNRPQR’ из $var. */
echo substr_replace ( $var , » , 10 , — 1 ) . «
\n» ;
?>

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

См. также описание функций str_replace() и substr().

substr_replace

substr_replace — заменяет текст части строки.

Описание

string substr_replace (string string, string replacement, int start [, int length])

substr_replace() замещает копию строки string, ограниченную параметрами start и (не обязательно) length - строкой, заданной в параметре replacement. Возвращает результат.

Если start положительный, замещение начинается со start‘ового смещения в строке string.

Если start отрицательный, замещение начинается со start‘ового символа от конца строки string.

Илон Маск рекомендует:  Script зарезервирован для будущего использования (нет в html 2 0)

Если задан положительный length, он представляет длину замещаемой части строки string. Если он отрицательный, он представляет количество символов от конца строки string, с которых замещение останавливается. Если он не задан, то по умолчанию будет strlen( string ); т.е. конец замещения — в конце string.

Кодировка substr_replace в PHP

Я хочу записать в текстовый файл. Когда я использую substr_replace в php, изменяется кодировка. Он не печатает греческие символы правильно. Если я не все хорошо. Какие-либо предложения?

РЕЗУЛЬТАТ
εφδφ
δφδσφδσ
δφδφδ

РЕЗУЛЬТАТЫ С НИКАКОЙ substr_replace
δφδφ
δφδσφδσ
δφδφδ

Предполагая, что вы кодируете греческий язык в многобайтовой кодировке (например, UTF-8), это не будет работать, потому что основные функции строки PHP, включая substr_replace , не являются многобайтовыми. Они обрабатывают один символ равным одному байту, а это означает, что вы закончите разбиение многобайтовых символов пополам, если вы замените только свой первый байт. Вы должны использовать более ручной подход, включающий многобайтную mb_substr функцию, такую ​​как mb_substr :

Комментарий @arma ссылки в комментариях обертывают эту функциональность в функции.

Попробуйте эту версию:

Вы можете использовать эти две функции:

Я пробовал оба, и оба работают хорошо

Вы можете попробовать использовать mb_convert_encoding() для установки правильной кодировки.

Substr_replace и utf-8

20.08.2015, 20:42

str_replace и substr_replace
str_replace и substr_replace В чем разница? Оба зменяют одну строку другой. Чем лучше та или.

UTF-8
Если я правильно понял, для 1 вопроса надо делать 1 тему.. Так вот второй вопрос, который мучит -.

Из ANSI в UTF-8
Привет! Ищу скрипт который будет преобразовать файлы из ANSI(Windows-1251) в UTF-8. Пробовал.

strtoupper и UTF-8
Доброго времени суток! Помогите пожалуйста с переводом строки в верхний регистр. Мануал по курил.

Не распознается UTF-8
Есть страница, возвращаемая PHP модулем в кодировке UTF-8. Опера распознает ее автоматически, а.

substr_replace() — замещение подстрок

Допустим случилось такое: у нас есть номер банковского счета и нужно скрыть последние 4 символа и заменить на *, для этого отлично подойдет функция substr_replace.

Пока что приведу немного другой пример, чтобы было понятнее:
У нас есть строка Hello world. И слово Hello необходимо заменить на Hi.Смотрим как это делается:

substr_replace($old_string, $new_string, $start, $lenght);
$old_string — Это основная строка, в которой необходимо произвести замену.
$new_string — Это слово, на которое необходимо произвести замену.
$start — Начало отсчета строки, которую необходимо заменить.
$lenght — Колличество символов, которые необходимо заменить.

Тем самым образом слово Hello мы заменяем на слово Hi. И в итоге получаем Hi world.

substr_replace

(PHP 4, PHP 5, PHP 7)

substr_replace — Заменяет часть строки

Описание

substr_replace() заменяет часть строки string , начинающуюся с символа с порядковым номером start и (необязательной) длиной length , строкой replacement и возвращает результат.

Список параметров

Также можно указать массив строк, в этом случае замены будут происходить с каждой предоставленной строкой. В этом случае параметры replacement , start и length могут быть как скалярными значениями — в этом случае эти значения будут применены к каждой строке, так и массивами — в этом случае соответствующие элементы массивов будут применены к каждой предоставленной строке.

Если start положителен, замена начинается с символа с порядковым номером start строки string .

Если start отрицателен, замена начинается с символа с порядковым номером start , считая от конца строки string .

Если аргумент положителен, то он представляет собой длину заменяемой подстроки в строке string . Если этот аргумент отрицательный, он определяет количество символов от конца строки string , на которых заканчивается замена. Этот аргумент необязателен и по умолчанию равен strlen( string );, то есть замена до конца строки string . Разумеется, если length равен нулю, то это эквивалентно вставке replacement в string на указанной позиции start .

Возвращаемые значения

Возвращает результирующую строку. Если string является массивом, то возвращает массив.

Примеры

Пример #1 Простой пример использования substr_replace()

= ‘ABCDEFGH:/MNRPQR/’ ;
echo «Оригинал: $var \n» ;

/* Обе следующих строки заменяют всю строку $var на ‘bob’. */
echo substr_replace ( $var , ‘bob’ , 0 ) . «
\n» ;
echo substr_replace ( $var , ‘bob’ , 0 , strlen ( $var )) . «
\n» ;

/* Вставляет ‘bob’ в начало $var. */
echo substr_replace ( $var , ‘bob’ , 0 , 0 ) . «
\n» ;

/* Обе следующих строки заменяют ‘MNRPQR’ в $var на ‘bob’. */
echo substr_replace ( $var , ‘bob’ , 10 , — 1 ) . «
\n» ;
echo substr_replace ( $var , ‘bob’ , — 7 , — 1 ) . «
\n» ;

/* Удаляет ‘MNRPQR’ из $var. */
echo substr_replace ( $var , » , 10 , — 1 ) . «
\n» ;
?>

Пример #2 Использование substr_replace() для одновременной множественной замены строк

= array( ‘A: XXX’ , ‘B: XXX’ , ‘C: XXX’ );

// Простой случай: заменяем XXX на YYY в каждой строке.
echo implode ( ‘; ‘ , substr_replace ( $input , ‘YYY’ , 3 , 3 )). «\n» ;

// Более сложный случай с уникальными заменами.
$replace = array( ‘AAA’ , ‘BBB’ , ‘CCC’ );
echo implode ( ‘; ‘ , substr_replace ( $input , $replace , 3 , 3 )). «\n» ;

// Замены с разными количествами символов.
$length = array( 1 , 2 , 3 );
echo implode ( ‘; ‘ , substr_replace ( $input , $replace , 3 , $length )). «\n» ;
?>

Результат выполнения данного примера:

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Смотрите также

User Contributed Notes 33 notes

It’s worth noting that when start and length are both negative -and- the length is less than or equal to start, the length will have the effect of being set as 0.

( ‘eggs’ , ‘x’ ,- 1 ,- 1 ); //eggxs
substr_replace ( ‘eggs’ , ‘x’ ,- 1 ,- 2 ); //eggxs
substr_replace ( ‘eggs’ , ‘x’ ,- 1 ,- 2 ); //eggxs
?>

Same as:
( ‘eggs’ , ‘x’ ,- 1 , 0 ); //eggxs
?>

( ‘huevos’ , ‘x’ ,- 2 ,- 2 ); //huevxos
substr_replace ( ‘huevos’ , ‘x’ ,- 2 ,- 3 ); //huevxos
substr_replace ( ‘huevos’ , ‘x’ ,- 2 ,- 3 ); //huevxos
?>

Same as:
( ‘huevos’ , ‘x’ ,- 2 , 0 ); //huevxos
?>

Another note, if length is negative and start offsets the same position as length, length (yet again) will have the effect as being set as 0. (Of course, as mentioned in the manual, when length is negative it actually represents the position before it)

( ‘abcd’ , ‘x’ , 0 , — 4 ); //xabcd
?>

Same as:
( ‘abcd’ , ‘x’ , 0 , 0 ); //xabcd
?>

( ‘abcd’ , ‘x’ , 1 , — 3 ); //axbcd
?>

Same as:
( ‘abcd’ , ‘x’ , 1 , 0 ); //axbcd
?>

I’ve just taken a look at the post by ntoniazzi and I have a very small correction to make.

In the second if statement, it should be a triple equals, so:

if ( $length === null ) ?>

It requires the triple equals, for the case of pure insertion, where $length = 0, the double equals, will catch this, causing the string to be cut short. I hope this helps someone.

Forget all of the mb_substr_replace() implementations mentioned in this page, they’re all buggy.

Here is a version that mimics the behavior of substr_replace() exactly:

if ( function_exists ( ‘mb_substr_replace’ ) === false )
<
function mb_substr_replace ( $string , $replacement , $start , $length = null , $encoding = null )
<
if ( extension_loaded ( ‘mbstring’ ) === true )
<
$string_length = ( is_null ( $encoding ) === true ) ? mb_strlen ( $string ) : mb_strlen ( $string , $encoding );

if ( $start 0 )
<
$start = max ( 0 , $string_length + $start );
>

else if ( $start > $string_length )
<
$start = $string_length ;
>

if ( $length 0 )
<
$length = max ( 0 , $string_length — $start + $length );
>

else if (( is_null ( $length ) === true ) || ( $length > $string_length ))
<
$length = $string_length ;
>

if (( $start + $length ) > $string_length )
<
$length = $string_length — $start ;
>

if ( is_null ( $encoding ) === true )
<
return mb_substr ( $string , 0 , $start ) . $replacement . mb_substr ( $string , $start + $length , $string_length — $start — $length );
>

return mb_substr ( $string , 0 , $start , $encoding ) . $replacement . mb_substr ( $string , $start + $length , $string_length — $start — $length , $encoding );
>

return ( is_null ( $length ) === true ) ? substr_replace ( $string , $replacement , $start ) : substr_replace ( $string , $replacement , $start , $length );
>
>

I recently ran across a situation where I need to strip a heavily nested html list such that only the top level was preserved. I started with a regular expression solution, but found that I kept matching the wrong closing ul with an outer opening ul.

This was my alternative solution, and it seems to work well:

function stripNestedLists ( $str )
<
$str2 = $str ;
$lastStr = $str2 ;

do
<
// Find the first closing ul
$cul = strpos ( $str2 , ‘

‘ );
$ul = 0 ;
$lastUL = 0 ;
do
<
// Find the next opening ul
$lastUL = $ul ;
$ul = strpos ( $str2 , ‘

    , $ul + 1 );
    >
    while ( $ul !== false && $ul $cul );

    $lastStr = $str2 ;
    $str2 = substr_replace ( $str2 , » , $lastUL , $cul — $lastUL + 5 );
    $str2 = trim ( $str2 );
    >
    while ( strlen ( $str2 ) > 0 );

    ?>

    Hope this helps someone.

    I wrote a function that you can use for example in combination with a search script to cut off the articles that are too long.

    function substr_index ( $text , $maxChars = 20 , $splitter
    = ‘. ‘ ) <

    $theReturn = $text ;
    $lastSpace = false ;

    if ( strlen ( $text ) > $maxChars ) <
    $theReturn = substr ( $text , 0 , $maxChars — 1 );

    if ( in_array ( substr ( $text , $maxChars — 1 , 1 ),
    array( ‘ ‘ , ‘.’ , ‘!’ , ‘?’ ))) <
    $theReturn .= substr ( $text , $maxChars , 1 );
    > else <
    $theReturn = substr ( $theReturn , 0 , $maxChars —
    strlen ( $splitter ));
    $lastSpace = strrpos ( $theReturn , ‘ ‘ );

    if ( $lastSpace !== false ) <
    $theReturn = substr ( $theReturn , 0 , $lastSpace );
    >

    if ( in_array ( substr ( $theReturn , — 1 , 1 ), array( ‘,’ ))) <
    $theReturn = substr ( $theReturn , 0 , — 1 );
    >
    $theReturn .= $splitter ;
    >
    >
    return $theReturn ;
    >
    ?>

    This will truncate a longer string to a smaller string of specified length while replacing the middle portion with a separator exactly in the middle.

    = ‘abcdefghijklmnopqrstuvwxyz0123456789z.jpg’ ;
    $separator = ‘/. /’ ;
    $separatorlength = strlen ( $separator ) ;
    $maxlength = 25 — $separatorlength ;
    $start = $maxlength / 2 ;
    $trunc = strlen ( $longString ) — $maxlength ;

    echo substr_replace ( $longString , $separator , $start , $trunc );

    //prints «abcdefghij/. /56789z.jpg»

    I have a little function that works like substr_replace () what I use for some purpose. Maybe someone needs it.

    function putinplace ( $string = NULL , $put = NULL , $position = false )
    <
    $d1 = $d2 = $i = false ;
    $d =array( strlen ( $string ), strlen ( $put ));
    if( $position > $d [ 0 ]) $position = $d [ 0 ];
    for( $i = $d [ 0 ]; $i >= $position ; $i —) $string [ $i + $d [ 1 ]]= $string [ $i ];
    for( $i = 0 ; $i $d [ 1 ]; $i ++) $string [ $position + $i ]= $put [ $i ];
    return $string ;
    >

    // Explanation
    $string = ‘My dog dont love postman’ ; // string
    $put = «‘» ; // put ‘ on position
    $position = 10 ; // number of characters (position)
    print_r ( putinplace ( $string , $put , $position ) );
    ?>

    RESULT: My dog don’t love postman

    This is a small powerful function that performs its job flawlessly.

    PHP version of Java’s removeCharAt() function:

    function removeCharAt ( $str , $int ) <
    return substr_replace ( $str , «» , $int , 1 );
    >
    ?>

    Using substr_replace() can be avoided by using substr() instead:

    This can be useful when you need to replace parts of multibyte strings like strings encoded with utf-8. There isn’t a multibute variant for substr_replace(), but for php substr() there is mb_substr(). For more information on multibyte strings see http://nl3.php.net/manual/en/ref.mbstring.php

    My problem was that substr_replace() always added $replacement, so i wrote my own function.
    This function only adds $replacement, if substr() took action.
    The parameter $length is optional — like substr()’s.
    Or I was too stupid using $start and $length.

    function substr_replace_provided ( $string , $replacement , $start , $length = NULL )
    <
    $tmp = substr ( $string , $start , $length );
    if( $string !== $tmp ) <
    $string = $tmp . $replacement ;
    >
    return $string ;
    >
    ?>

    // shortens a long string to a max length while inserting a string into the exact middle
    function strShorten ( $str , $maxlen = 10 , $insert = ‘/. /’ ) <
    if ( $str && ! is_array ( $str )) < // valid string
    if ( $maxlen && is_numeric ( $maxlen ) && $maxlen strlen ( $str )) < // string needs shortening
    if ( $insert && ( $ilen = strlen ( $insert ))) < // insert string and length
    if ( $ilen >= $maxlen ) < // insert string too long so use default insert
    $insert = ‘**’ ; // short default so works even when a very small $maxlen
    $ilen = 2 ;
    >
    >
    $chars = $maxlen — $ilen ; // number of $str chars to keep
    $start = ceil ( $chars / 2 ); // position to start cutting
    $end = floor ( $chars / 2 ); // position from end to stop cutting
    return substr_replace ( $str , $insert , $start , — $end ); // first.insert.last
    > else < // string already short enough
    return $str ; // return original string
    >
    >
    >

    echo strShorten ( ‘123456789’ , 6 , » ); // outputs 123789
    echo strShorten ( ‘123456789’ , 6 , ‘-‘ ); // outputs 123-89
    echo strShorten ( ‘123456789’ , 6 , ‘longstring’ ); // outputs 12**89
    echo strShorten ( ‘abcdefghijklmnopqrstuvwxyz’ , 10 , ‘..’ ); // outputs abcd..wxyz
    echo strShorten ( ‘abcdefghijklmnopqrstuvwxyz’ ); // outputs abc/. /yz

    I suggest changing the function suggested by Guru Evi slightly. I found that it doesn’t work as written here.

    Original:
    function add_3dots($string,$repl,$start,$limit) <
    if(strlen($string) > $limit) <
    return substr_replace(strip_tags($string),$repl,$start,$limit);
    > else <
    return $string;
    >;
    >;

    I suggest:
    function add_3dots($string,$repl,$limit) <
    if(strlen($string) > $limit) <
    return substr_replace(strip_tags($string),$repl,$limit-strlen($repl));
    > else <
    return $string;
    >
    >

    $max_length=10;//the max number of characters you want to display
    $too_long_string=»BLAH BLAH BLAH BLAH BLAH etc.»;//the string you want to shorten (if it’s longer than the $limit)
    $shorter_string=add_3_dots($too_long_string,». «,$max_length);

    I recently needed a routine that would remove the characters in one string from another, like the regex

    = preg_replace ( «/[ $chars ]/» , «» , $string );
    ?>

    and I needed it to be fast, and accept pretty much all input. The regex above won’t work when strlen($chars) == 0. I came up with this, admittedly pretty horrible-looking code, that is quite fast:

    function RemoveChars ( $string , $chars )
    <
    return isset( $chars < 0 >) ? str_replace ( $chars < 0 >, «» , strtr ( $string , $chars , str_pad ( $chars < 0 >, strlen ( $chars ), $chars < 0 >))) : $string ;
    >

    ?>

    According to my own measurements, the regex in ONLY faster for when strlen($chars) == 1; for longer strings, my routine is faster. What does it do? Let’s say you want to remove the period, the comma and the exclamation mark from a string, like so:
    $result = RemoveChars(«Isn’t this, like, totally neat. «, «. «);
    The str_pad function creates a string equal in length to the string that contains the character to be removed, but consisting only of the first character of that string:
    The input is «. «
    The output is «. «
    The strtr function translates all characters in the string-to-be-processed («Isn’t this. «) that also occur in the input («. «) to the characters in the same position in the output («. «). In other words:
    Isn’t this, like, totally neat.
    becomes
    Isn’t this. like. totally neat.
    Finally, the first character from the input («. «) which happens to be, again, the period, is removed from that string by the str_replace call:
    Isn’t this like totally neat?
    The function needs to check is $chars has at least one character, or else the str_pad function will fail. If it’s empty, then the unprocessed string is returned.

    If your string is not long enough to meet what you specify in start and length then the replacement string is added towards the end of the string.

    I wanted to replace the end of the string with . if the string was too long to display (for instance article preview on a website). The problem was that my string was sometimes not that long and it still added the replacement string. So I wrote a function to replace substr_replace in my website:

    function add_3dots($string,$repl,$start,$limit) <
    if(strlen($string) > $limit) <
    return substr_replace(strip_tags($string),$repl,$start,$limit);
    > else <
    return $string;
    >;
    >;

    I use strip_tags to strip out the HTML otherwise you might get a screwed up HTML (when a tags open in the string, but because you cut-off it doesn’t)

    THE DOT DOT DOT ISSUE

    PROBLEM:
    You want to abbreviate a string.
    E.g. You want «BritneySpears» to show as «BritneySpe. «, being only the ten first characters followed by «. «

    This will result in BritneySpe.

    the version of my predecessor will add $rep even if the string is shorter than max. fixed version:

    function truncate ( $string , $max = 20 , $rep = » )
    <
    if ( strlen ( $string ) $max + strlen ( $rep )))
    <
    return $string ;
    >
    $leave = $max — strlen ( $rep );
    return substr_replace ( $string , $rep , $leave );
    >
    ?>

    To preserve the filename extension you can call it like this:

    truncate([filename], 30, ‘. ‘ . end(explode(‘.’, [filename])))

    Here is a simple function to shorten a string and add an ellipsis

    /**
    * truncate() Simple function to shorten a string and add an ellipsis
    *
    * @param string $string Origonal string
    * @param integer $max Maximum length
    * @param string $rep Replace with. (Default = » — No elipsis -)
    * @return string
    * @author David Duong
    **/
    function truncate ( $string , $max = 50 , $rep = » ) <
    $leave = $max — strlen ( $rep );
    return substr_replace ( $string , $rep , $leave );
    >

    echo truncate ( ‘akfhslakdhglksjdgh’ , 10 , ‘. ‘ );
    // Returns akfhsla. (10 chrs)

    Илон Маск рекомендует:  Создание анимированной gif-картинки
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL