suche nach in der

substr> <substr_count
Last updated: Fri, 18 May 2012

view this page in

substr_replace

(PHP 4, PHP 5)

substr_replaceErsetzt Text innerhalb einer Zeichenkette

Beschreibung

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

substr_replace() ersetzt in einer Kopie von string alle Zeichen, die sich innerhalb der durch die Parameter start und (optional) length festgelegten Grenze befinden, mit der in replacement angegebenen Zeichenkette.

Parameter-Liste

string

Die Eingabezeichenkette.

Ein array von strings kann übergeben werden; die Ersetzungen erfolgen dann bei jeder Zeichenkette der Reihe nach. In diesem Fall können die replacement, start und length Parameter entweder als Skalar übergeben werden, die auf jede Eingabezeichenkette der Reihe nach angewandt werden, oder als arrays; in diesem Fall wird das entsprechende Array Element für jede Eingabe Zeichenkette genutzt.

replacement

Die Ersetzungszeichenkette

start

Ist start positiv, beginnt die Ersetzung ab der im Offset-Parameter start definierten Stelle innerhalb von string.

Ist start negativ, wird vom Ende der Zeichenkette string bis zum Wert von start rückwärts gezählt und dort mit dem Austausch begonnen.

length

Ist der Parameter angegeben und positiv, stellt dieser Parameter die Länge des auszuwechselnden Teils von string dar. Ist der Wert negativ, gibt er die Zeichenzahl an, um die ab Ende von string rückwärts gezählt wird. Bis zu dieser Stelle erfolgt dann der Austausch. Ist der Parameter nicht angegeben, wird standardmäßig eine Ersetzung bis zum Ende des Strings (strlen(string )) durchgeführt, das heißt, die Ersetzung endet mit dem Ende von string. Sollte length den Wert null haben, wird die Funktion die Zeichenkette replacement in string an der durch start bezeichneten Stelle einfügen.

Rückgabewerte

Der entstehende String wird zurückgegeben. Ist string ein Array, wird auch ein Array zurückgegeben.

Changelog

Version Beschreibung
4.3.3 Alle Parameter akzeptieren nun arrays.

Beispiele

Beispiel #1 Einfache substr_replace()-Beispiele

<?php
$var 
'ABCDEFGH:/MNRPQR/';
echo 
"Original: $var<hr />\n";

/* Die beiden Beispiele ersetzten alle Vorkommen von
   $var durch 'bob'. */
echo substr_replace($var'bob'0) . "<br />\n";
echo 
substr_replace($var'bob'0strlen($var)) . "<br />\n";

/* Einfügen von 'bob' direkt am Anfang von $var. */
echo substr_replace($var'bob'00) . "<br />\n";

/* Die nächsten beiden Beispiele ersetzen 'MNRPQR' in $var
   durch 'bob'. */
echo substr_replace($var'bob'10, -1) . "<br />\n";
echo 
substr_replace($var'bob', -7, -1) . "<br />\n";

/* Entfernen von 'MNRPQR' aus $var. */
echo substr_replace($var''10, -1) . "<br />\n";
?>

Beispiel #2 Nutzung von substr_replace() um mehrere Zeichenketten auf einmal zu ersetzen.

<?php
$input 
= array('A: XXX''B: XXX''C: XXX');

// Ein einfacher Fall: ersetze XXX in jeder Zeichenkette mit YYY.
echo implode('; 'substr_replace($input'YYY'33))."\n";

// Ein komplizierterer Fall bei dem jede Ersetzung unterschiedlich ist.
$replace = array('AAA''BBB''CCC');
echo 
implode('; 'substr_replace($input$replace33))."\n";

// Ersetze eine jedesmal unterschiedliche Anzahl von Zeichen
$length = array(123);
echo 
implode('; 'substr_replace($input$replace3$length))."\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

A: YYY; B: YYY; C: YYY
A: AAA; B: BBB; C: CCC
A: AAAXX; B: BBBX; C: CCC

Anmerkungen

Hinweis: Diese Funktion ist binary safe.

Siehe auch



add a note add a note User Contributed Notes
substr_replace
www.kigoobe.com
21-Mar-2007 11:00
The two truncate functions provided below, have some major short comings.

1. They may cut a word in half
2. In case you are using htmlentities to get user input or are using wysiwyg editors to get user input, you can get truncated text like "he told C&eac..." instead of "he told Cécile" or "he told".

Here is what I use -

<?php
function truncate($text,$numb) {
// source: www.kigoobe.com, please keep this if you are using the function
$text = html_entity_decode($text, ENT_QUOTES);
if (
strlen($text) > $numb) {
$text = substr($text, 0, $numb);
$text = substr($text,0,strrpos($text," "));
$etc = " ..."
$text = $text.$etc;

$text = htmlentities($text, ENT_QUOTES); 
return
$text;
}

// Now, to use this function, you can call that as -
truncate($text, 75);
?>
chuayw2000 at hotmail dot com
09-Dec-2005 12:33
I don't know if this function is multibyte safe but I've written a function that will do the same in multibyte mode.

<?php
//Check to see if it exists in case PHP has this function later
if (!function_exists("mb_substr_replace")){
  
//Same parameters as substr_replace with the extra encoding parameter.
   
function mb_substr_replace($string,$replacement,$start,$length=null,$encoding = null){
        if (
$encoding == null){
            if (
$length == null){
                return
mb_substr($string,0,$start).$replacement;
            }
            else{
                return
mb_substr($string,0,$start).$replacement.mb_substr($string,$start + $length);
            }
        }
        else{
            if (
$length == null){
                return
mb_substr($string,0,$start,$encoding).$replacement;
            }
            else{
                return
mb_substr($string,0,$start,$encoding). $replacement. mb_substr($string,$start + $length,mb_strlen($string,$encoding),$encoding);
            }
        }
    }
}
?>
michael(at)webstaa(dot)com
06-Dec-2005 05:47
I created this because of the need to mask a credit-card number like **** **** **** 8862

string mask ( string str, int start [, int length] )

mask() masks a copy of str delimited by the start and (optionally) length parameters with asterisks (*) in place of non-whitespace characters

<?php
   
function mask ( $str, $start = 0, $length = null ) {
       
$mask = preg_replace ( "/\S/", "*", $str );
        if (
is_null ( $length )) {
           
$mask = substr ( $mask, $start );
           
$str = substr_replace ( $str, $mask, $start );
        } else {
           
$mask = substr ( $mask, $start, $length );
           
$str = substr_replace ( $str, $mask, $start, $length );
        }
        return
$str;
    }
?>
hermes at andycostell dot com
27-Aug-2005 08:48
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;
       }
    }

Usage:

$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);
Guru Evi
13-Jul-2005 09:44
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)
ogt at parasane dot com
22-Jan-2005 12:02
Actually, just a minor correction to tekrat at 2d dot com's post:

Change the code....
<?
      
if(strlen($substring) < 1){
          
$string = $rep;
       }else{
          
$string = $substring;
       }
?>

.... into....
<?
      
if(strlen($substring) >= 1){
          
$string = $substring;
       }
?>

.... otherwise you'll end up with the elipses (...) for any null strings.
tekrat at 2d dot com
06-Jan-2005 05:55
Here's a slightly revised version of the truncation function above.

Theres isn't much of a reason to  add in the $rep at the end of the original string is less then the truncation break point.
<?
   
function truncate($substring, $max = 50, $rep = '...') {
        if(
strlen($substring) < 1){
           
$string = $rep;
        }else{
           
$string = $substring;
        }
       
       
$leave = $max - strlen ($rep);
       
        if(
strlen($string) > $max){
            return
substr_replace($string, $rep, $leave);
        }else{
            return
$string;
        }
       
    }
?>
danieldoorduin at hotmail dot com
10-Dec-2004 11:48
Using substr_replace() can be avoided by using substr() instead:

<?
$string
= substr($string, 0, $position_needle).$replace.substr($string, $position_needle+$length_needle);
?>

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
titbits at nospam-4logical dot co dot uk
04-Aug-2004 11:28
A simple but useful 'pluralize' function using substr_replace:

  function pluralize($noun) {
    if ($noun{strlen($noun) -1} == "y")
      $noun = substr_replace($noun, "ies", strlen($noun) -1);
    else
      $noun .= "s";

    return $noun;
  }

Handy when displaying dynamic text.
dmron
18-Jun-2004 01:34
Regarding "...", even the short functions are too long and complicated, and there's no need to use substr_replace. substr() works better and is  way faster prior to 4.3.5 as the below poster stated.

function shorten( $str, $num = 100 ) {
  if( strlen( $str ) > $num ) $str = substr( $str, 0, $num ) . "...";
  return $str;
}
philip
13-May-2004 09:55
The substr_replace() function is extremely slow in PHP versions prior to 4.3.5 and 5.0.0 so consider using an alternative before this time.
tony at outshine dot com
10-May-2004 11:25
The comment by geniusdex is a good one.  Short, simple functions are the best.  But if the string is not longer than the limit set, NOTHING is returned.  Here is the function re-done to always return a string:

<?php
function dot($str, $len, $dots = "...") {
    if (
strlen($str) > $len) {
       
$dotlen = strlen($dots);
       
$str = substr_replace($str, $dots, $len - $dotlen);
    }
    return
$str;
}
?>
geniusdex ( at ) brz ( dot ) nu
23-Feb-2004 04:33
This is my version of making dotted strings:

<?php
function dot($str, $len, $dots = "...") {
    if (
strlen($str) > $len) {
       
$dotlen = strlen($dots);
       
substr_replace($str, $dots, $len - $dotlen);
    }
}
?>
Thijs Wijnmaalen (thijs[at]nllinux.nl)
20-Jan-2004 08:05
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.

<?php
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;
}
?>
neon at lordneon dot com
05-Nov-2003 01:40
The easiest way (I think) to add trailing dots after a string which in my case are too long is:

<?
function dots($num, $string) {
    if (
strlen($string) < $num) {
       
$string = substr_replace($string, '...', '-10', $num);
    }
    return
$string;
}

Then on your page do something like:
<? echo
dots("30" $row['title']); ?>

if the string is greater than the specific number it'll replace 3 dots.

I hope this helps =)
?>
david at ethinkn dot com
06-Jul-2003 02:36
Here is a simple function to shorten a string and add an ellipsis

<?php

/**
 * 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)

?>
thomasNOSPAM at sportentranceNOSPAM dot com
09-Oct-2002 12:01
To abbreviate links into '...' if they outreach a certain amount of space; use the preg_replace function instead.

For instance you grabbed the headlines of a news site for use on your own page and the lines are to long:

asuming the raw material is stored in $unedited;

$edited = preg_replace("/(>)([[:print:]]{52,})(<)/e", "'\\1'.substr_replace('\\2 ', '...', '48').'\\3'", $unedited);
echo $edited;

This will shorten strings longer than 52 characters into 51 characters, with the last being three dots...
klaas at group94 dot com
13-Feb-2002 07:38
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 "..."

SOLUTION:
<?
$oRIGINAL
= "BritneySpears";
$sHORTER = substr_replace($oRIGINAL, '...', 10);
echo (
$sHORTER);
?>

This will result in BritneySpe...
29-Sep-2001 05:30
If you would like to remove characters from the start or end of a string, try the substr() function.

For example, to remove the last three characters from a string:
$string = "To be or not to be.";
$string = substr ($string, 0, -3);
mrbrown8 at juno dot com
16-Apr-2001 09:16
Just to add to the examples, if replacement is longer than length, only the length number of chars are removed from string and all of replacement is put in its place, and therefor strlen($string) is inreased.

$var = 'ABCDEFGH:/MNRPQR/';
/*  Should return ABCDEFGH:/testingRPQR/   */
echo substr_replace ($var, 'testing', 10, 2);
stefan at maifei dot com
01-Apr-2001 10:33
If you are trying to use -0, I don't think it works.  For example:

substr_replace($file,'',-4,0)

There may be an alternative though...
jgainey at infoave dot net
14-Mar-2001 03:29
[Editor's note: for a much simpler solution, use number_format()]

I had a situation in which I needed to add a comma to the third position of a number(the price of something).
<p>
$price = "12000";<br>
$price = substr_replace ($price, ',', -3, 0)";<br>
the result would be 12,000<p>
the -3 counts from right to left. a regular 3 would count from left to right
I hope this helps...

substr> <substr_count
Last updated: Fri, 18 May 2012