10 PHP code snippets for working with strings

by Jean. 38 Comments -

Strings are a very important kind of data, and you have to deal with them daily with web development tasks. In this article, I have compiled 10 extremely useful functions and code snippets to make your php developer life easier.

Automatically remove html tags from a string

On user-submitted forms, you may want to remove all unnecessary html tags. Doing so is easy using the strip_tags() function:

$text = strip_tags($input, "");

Source: http://phpbuilder.com/columns/Jason_Gilmore060210.php3?page=2

Get the text between $start and $end

This is the kind of function every web developer should have in their toolbox for future use: give it a string, a start, and an end, and it will return the text contained with $start and $end.

function GetBetween($content,$start,$end){
    $r = explode($start, $content);
    if (isset($r[1])){
        $r = explode($end, $r[1]);
        return $r[0];
    }
    return '';
}

Source: http://www.jonasjohn.de/snippets/php/get-between.htm

Transform URL to hyperlinks

If you leave a URL in the comment form of a WordPress blog, it will be automatically transformed into a hyperlink. If you want to implement the same functionality in your own website or web app, you can use the following code:

$url = "Jean-Baptiste Jung (http://www.webdevcat.com)";
$url = preg_replace("#http://([A-z0-9./-]+)#", '$0', $url);

Source: http://phpbuilder.com/columns/Jason_Gilmore060210.php3?page=2

Split text up into 140 char array for Twitter

As you probably know, Twitter only accepts messages of 140 characters or less. If you want to interact with the popular social messaging site, you’ll enjoy this function for sure, which will allow you to truncate your message to 140 characters.

function split_to_chunks($to,$text){
	$total_length = (140 - strlen($to));
	$text_arr = explode(" ",$text);
	$i=0;
	$message[0]="";
	foreach ($text_arr as $word){
		if ( strlen($message[$i] . $word . ' ') <= $total_length ){
			if ($text_arr[count($text_arr)-1] == $word){
				$message[$i] .= $word;
			} else {
				$message[$i] .= $word . ' ';
			}
		} else {
			$i++;
			if ($text_arr[count($text_arr)-1] == $word){
				$message[$i] = $word;
			} else {
				$message[$i] = $word . ' ';
			}
		}
	}
	return $message;
}

Source: http://www.phpsnippets.info/split-text-up-into-140-char-array-for-twitter

Remove URLs from string

When I see the amount of URLs people try to leave in my blog comments to get traffic and/or backlinks, I think I should definitely give a go to this snippet!

$string = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $string);

Source: http://snipplr.com/view.php?codeview&id=15236

Convert strings to slugs

Need to generate slugs (permalinks) that are SEO friendly? The following function takes a string as a parameter and will return a SEO friendly slug. Simple and efficient!

function slug($str){
	$str = strtolower(trim($str));
	$str = preg_replace('/[^a-z0-9-]/', '-', $str);
	$str = preg_replace('/-+/', "-", $str);
	return $str;
}

Source: http://snipplr.com/view.php?codeview&id=2809

Parse CSV files

CSV (Coma separated values) files are an easy way to store data, and parsing them using PHP is dead simple. Don’t believe me? Just use the following snippet and see for yourself.

$fh = fopen("contacts.csv", "r");
while($line = fgetcsv($fh, 1000, ",")) {
    echo "Contact: {$line[1]}";
}

Source: http://phpbuilder.com/columns/Jason_Gilmore060210.php3?page=1

Search for a string in another string

If a string is contained in another string and you need to search for it, this is a very clever way to do it:

function contains($str, $content, $ignorecase=true){
    if ($ignorecase){
        $str = strtolower($str);
        $content = strtolower($content);
    }
    return strpos($content,$str) ? true : false;
}

Source: http://www.jonasjohn.de/snippets/php/contains.htm

Check if a string starts with a specific pattern

Some languages such as Java have a startWith method/function which allows you to check if a string starts with a specific pattern. Unfortunately, PHP does not have a similar built-in function.
Whatever- we just have to build our own, which is very simple:

function String_Begins_With($needle, $haystack {
    return (substr($haystack, 0, strlen($needle))==$needle);
}

Source: http://snipplr.com/view.php?codeview&id=2143

Extract emails from a string

Ever wondered how spammers can get your email address? That’s simple, they get web pages (such as forums) and simply parse the html to extract emails. This code takes a string as a parameter, and will print all emails contained within. Please don’t use this code for spam ;)

function extract_emails($str){
    // This regular expression extracts all emails from a string:
    $regexp = '/([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,4})+/i';
    preg_match_all($regexp, $str, $m);

    return isset($m[0]) ? $m[0] : array();
}

$test_string = 'This is a test string...

        test1@example.org

        Test different formats:
        test2@example.org;
        <a href="test3@example.org">foobar</a>
        <test4@example.org>

        strange formats:
        test5@example.org
        test6[at]example.org
        test7@example.net.org.com
        test8@ example.org
        test9@!foo!.org

        foobar
';

print_r(extract_emails($test_string));

Source: http://www.jonasjohn.de/snippets/php/extract-emails.htm

  • Alex

    The “Search for a string in another string” example could be wrong if the string is at the beginning of the content string which will result of 0 which is false. The correct way of doing it would be:

    return strpos($content,$str) !== false;

  • http://austinpassy.com The Frosty

    Awesome PHP snippets!

  • http://volomike.com/ Volomike

    My replacement for contains is a one-liner without a function:

    if (strpos(‘ ‘ . $sHaystack, $sNeedle)>0) { …then

    For checking inverse of that, as in a NOT condition, do:

    if (strpos(‘ ‘ . $sHaystack, $sNeedle) === FALSE) { …then

    And swap strpos with stripos if you want a case-insensitive search.

  • http://lewayotte.com/ Lew A

    oh, it’s stripping the tasg (ie. my last comment):

    $url = “Jean-Baptiste Jung (http://www.webdevcat.com)”;
    $url = preg_replace(“#http://([A-z0-9./-]+)#”, ‘<a href=”$1″>$0</a>’, $url);

  • Nox

    ad Search for a string in another string:
    I’m not sure if we can call this “extremely useful function,” besides being trivial also:

    Not just that there is a specific function in standard library, when using $ignorecase in this snippet you will *copy* both variables (PHP uses copy-on-write so normally then wouldn’t be copied even when not using references)

    So in faster and less memory-demanding way:
    $ignorecase ? stripos($content, $str) : strpos($content, $str)
    or if we feel the need of encapsulating into function then:
    function contains($content, $str, $ignorecase = true){
    return $ignorecase ? stripos($content, $str) : strpos($content, $str);
    }

    • nickf

      It would have to be:

      return false !== ($ignorecase ? stripos($content, $str) : strpos($content, $str);

  • http://andreigherasim.net Andrei Gherasim

    To get a substring, between start and end, better use substr. It’s lot faster, as it’s a core function

    • http://orenyomtov.com Oren Yomtov

      I absolutely agree.

    • Alex Vallejo

      substr requires a length in integer form to mark the end of the string, right?

  • http://kodegeek.wordpress.com Musa

    Seems good, have to test. Bookmarked

  • http://orenyomtov.com Oren Yomtov

    There is a better way to implement the “Search for a string in another string”, using the stripos:
    w3schools.com/PHP/func_string_stripos.asp
    php.net/manual/en/function.stripos.php

  • http://www.arabasatan.com oto ilan

    Nice share, thanks for share.

  • Pingback: === popurls.com === popular today

  • Pingback: 10 PHP code snippets for working with strings : Popular Links : eConsultant

  • http://caiju.in mealdy

    enjoyed this post, thanks!

  • OIS

    I dont see a huge need for these functions since they are practically built in:

    function String_Begins_With($needle, $haystack) {
    return strpos($haystack, $needle) === 0;
    }

    function contains($str, $content, $ignorecase=true){
    if ($ignorecase){
    return stripos($content, $str) !== false;
    }
    return strpos($content, $str) !== false;
    }

    • OIS

      function split_to_chunks($to,$text){
      $length = -1 * (strlen($text) – (140 – strlen($to)));
      $pos = strrpos($text, ‘ ‘, $length);
      return substr($text, 0, $pos);
      }

  • Charles

    Thanks for passing these along. However, two of the entries should be avoided, or improved:

    “Get the text between $start and $end”
    GetBetween() fails a number of simple tests:
    GetBetween( ‘a[b[c]d’, ‘[', ']‘ )
    GetBetween( ‘a]b[c', '[', ']‘ )

    “Convert strings to slugs”
    This one fails, by converting, for instance, “http://www.” into “http-www-”.

  • Pingback: 15+ Useful PHP Components, Techniques and Tutorials

  • Oliver

    I think, most of them are useless, as there are better native php functions:

    Get the text between $start and $end => substr()
    Split text up into 140 char array for Twitter => wordwrap/explode
    Remove URLs from string strip_tags
    Parse CSV files => file/explode
    Search for a string in another string => strpos/stripos
    Check if a string starts with a specific pattern => strpos === 0

    And most of these and the other examples are far away from good programming. Sorry stranger.

  • http://www.stop-smoking-aid.net Enzo Wilson

    Awesome post! It really helped me a lot! Thanks for sharing it.

  • http://do.fm.cr Luis Salazar

    I agree on this: most of them are really useless. But not only that, the worst thing is this kind of things contribute to the whole mess with PHP standardization and good practices. I really really appreciate the time and effort someone takes with good intention to share knowledge! 1000+ points to that!! thats good karma. But, to be honest, that leads to bad programming and shitty software. My advice: read the manual first and practice, practice, practice.

  • Pingback: Recommended Articles – June 9, 2010 :: Warbux Creative

  • http://www.seowebsitepromotion.net Josh Groal

    I love this post. Very informative and useful for beginners like me. Thanks for sharing it.

  • http://www.hooproll.com/ jordan kicks

    These strips all HTML tags gives you the option to preserve the ones you define. It also takes into account tags like removing all the javascript, too! You can also strip out all the content between any tag that has an opening and closing tag, like , , etc.soom

  • http://www.bankruptcyandinsolvencyact.ca Dave

    thanks for showing me how to search for a string in another string… I’d been trying to figure that out for a while.

  • http://droope.wordpress.com droope

    Hi :)

    I have a great url matching regex, that could be used for the “replace urls with links section of this post.

    The regex is:
    \b(([\w-]+://?|www[.])[^\s()]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))

    I’ve found it @ http://daringfireball.net/2009/11/liberal_regex_for_matching_urls

    You can find an explaination for it there. It works great for me :)

    Regards,
    Droope

  • http://www.encoreunblogseo.info/ Vince

    Thanks for sharing all this !!
    I am not a PHP developper but it is gonna be usefull anyway :)

  • Pingback: 10 PHP code snippets for working with strings « Wordpress Training

  • http://romantic18.blogspot.com/ vipin

    i have just started to learn PHP and about to complete my first book on it. so these code will definitely help me how professionals write code and will also be a kind of exercise for me. Thanks for sharing this.

  • http://www.link777.co.uk/ Ahmad

    Many thanks for sharing this tips ,.help a lots newbie for me

  • http://www.atechadviser.com aTechAdviser

    Hey nice article as usually. Just want to say that maybe preg_match or preg_match_all is the better option for:
    Get the text between $start and $end.
    preg_match_all(“/$start(.*?)$end/is”, $input, $out);
    $text_between = trim($out[1][0]);
    echo $text_between; // or return this if use in a function

    Otherwise nice PHP snippets

  • http://www.inikeairjordan.com vansci123

    the worst thing is this kind of things contribute to the whole mess with PHP standardization and good practices.I am not a PHP developper but it is gonna be usefull anyway

  • http://www.borsarti.com/ borsa

    Hım.. Very informative and useful for beginners like me. Thanks for sharing it.

  • http://www.innovativephp.com Rakhitha Nimesh

    Get the text between $start and $end post is very usefull to genaret documentation using comments. thanks a lot

  • http://www.yourgoalbook.com Alex WOrk

    Thanks for this. Been working on learning PHP the past few months in my spare time, and this was a great little tutorial to help me along.

  • http://www.onsalebuy.com/ Jeff

    Could some one explain me what preg_replace does in

    $url = preg_replace(“#http://([A-z0-9./-]+)#”, ‘$0′, $url);

    because I think it does nothing

  • http://itech.hubpages.com Krrish

    Useful Examples… I Liked the second (Get the text between $start and $end) and last (email) example… Bookmarked this for future reference.
    Thanks,
    Krrish