PHP string Replace

Robert Granlund
Robert Granlund used Ask the Experts™
on
PHP $filename = str_replace(' ', '_', $filename);

This will replace the space but I also need to replace a : and ".  I want to replace them with an underscore. (colon and double quote)
Or, is there a way also to escape the Colon also?
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Most Valuable Expert 2018
Distinguished Expert 2018

Commented:
You can pass an array into the str_replace() function with all the characters you want to replace:

$filename = str_replace([' ', ':', '"'], '_', $filename);

Open in new window

NorieAnalyst Assistant

Commented:
You could try this for replacing the characters.
$search = str_split(" :\"");
$replace ="_";

$filename = str_replace($search, $replace, $filename);

Open in new window


Not sure what you mean about escaping the colon, especially when you are replacing it with an underscore.
Most Valuable Expert 2017
Distinguished Expert 2018

Commented:
If you want to santize file names here are some examples

$fname = str_replace(array('\\','/',':','*','?','"','<','>','|'),' ',$filename);

Open in new window

This helper class available here [https://noiselabs.io/2011/04/25/sanitize-filenames-with-php/]
<?php

class Helper
{
    /**
     * Returns a safe filename, for a given platform (OS), by
     * replacing all dangerous characters with an underscore.
     *
     * @param string $dangerousFilename The source filename
     * to be "sanitized"
     * @param string $platform The target OS
     *
     * @return string A safe version of the input
     * filename
     */
    public static function sanitizeFileName($dangerousFilename, $platform = 'Unix')
    {
        if (in_array(strtolower($platform), array('unix', 'linux'))) {
            // our list of "dangerous characters", add/remove
            // characters if necessary
            $dangerousCharacters = array(" ", '"', "'", "&", "/", "\\", "?", "#");
        } else {
            // no OS matched? return the original filename then...
            return $dangerousFilename;
        }

        // every forbidden character is replace by an underscore
        return str_replace($dangerousCharacters, '_', $dangerousFilename);
        }
    }

Open in new window

Usage:
$safeFilename = Helper::sanitizeFileName('#my  unsaf&/file\name?"');

Open in new window


Using regular expressions
// Remove anything which isn't a word, whitespace, number
// or any of the following caracters -_~,;[]().
// If you don't need to handle multi-byte characters
// you can use preg_replace rather than mb_ereg_replace
// Thanks @Łukasz Rysiak!
$file = mb_ereg_replace("([^\w\s\d\-_~,;\[\]\(\).])", '', $file);
// Remove any runs of periods (thanks falstro!)
$file = mb_ereg_replace("([\.]{2,})", '', $file);

Open in new window

Source https://stackoverflow.com/questions/2021624/string-sanitizer-for-filename#answer-2021729
Introduction to Web Design

Develop a strong foundation and understanding of web design by learning HTML, CSS, and additional tools to help you develop your own website.

Author

Commented:
@chris, do the brackets indicate an array?
Most Valuable Expert 2017
Distinguished Expert 2018
Commented:
From this link http://php.net/manual/en/language.types.array.php
As of PHP 5.4 you can also use the short array syntax, which replaces array() with [].
Which means
$x = ['cow', 'bus driver', 'strawberry'];

Open in new window

Is now the equivalent
$y = array('cow', 'bus driver', 'strawberry')

Open in new window

Most Valuable Expert 2018
Distinguished Expert 2018

Commented:
Yes - in PHP you can do arrays like so:

$array = array(' ', ':', '"');

or

$array = [' ', ':', '"'];

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial