We help IT Professionals succeed at work.

PHP string Replace

Robert Granlund
on
97 Views
Last Modified: 2018-10-31
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

CERTIFIED EXPERT
Most Valuable Expert 2018
Distinguished Expert 2019

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
CERTIFIED EXPERT

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.
CERTIFIED EXPERT
Most Valuable Expert 2017
Distinguished Expert 2019

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

Author

Commented:
@chris, do the brackets indicate an array?
CERTIFIED EXPERT
Most Valuable Expert 2017
Distinguished Expert 2019
Commented:
This problem has been solved!
(Unlock this solution with a 7-day Free Trial)
UNLOCK SOLUTION
CERTIFIED EXPERT
Most Valuable Expert 2018
Distinguished Expert 2019

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

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

or

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