Skip to content

Instantly share code, notes, and snippets.

@thibaut-decherit
Last active August 23, 2023 16:16
Show Gist options
  • Save thibaut-decherit/2ea38bf0b2a86dbd634aaf7b520f97bc to your computer and use it in GitHub Desktop.
Save thibaut-decherit/2ea38bf0b2a86dbd634aaf7b520f97bc to your computer and use it in GitHub Desktop.
Symfony - StringHelper.md

Symfony - StringHelper

src/Helper/StringHelper.php

<?php

namespace App\Helper;

/**
 * Class StringHelper
 * Utility class for string formatting and manipulation.
 *
 * @package App\Helper
 */
class StringHelper
{
    /**
     * Removes accents from all characters in $string.
     *
     * @param string $string
     * @return string
     */
    public static function removeAccents(string $string): string
    {
        return transliterator_transliterate('Any-Latin; Latin-ASCII', $string);
    }

    /**
     * Removes from $filename characters that are reserved by OSes.
     * May be a little too restrictive.
     *
     * @param string $filename
     * @return string
     */
    public static function removeIllegalCharactersFromFilename(string $filename): string
    {
        return preg_replace('/[^a-zA-Z0-9._ -]/', '', $filename);
    }

    /**
     * Sanitizes $url if it is not relative (does not start with '/') and replaces it with $cleanUrl.
     *
     * @param string $url
     * @param string $cleanUrl
     * @return string
     */
    public static function sanitizeUrlIfAbsolute(string $url, $cleanUrl = '/'): string
    {
        if (!self::startsWith($url, '/')) {
            $url = $cleanUrl;
        }

        return $url;
    }

    /**
     * Returns true if $string starts with $query, otherwise it returns false.
     * Supports extended charsets.
     *
     * @param string $string
     * @param string $query
     * @param string $encoding
     * @return bool
     */
    public static function startsWith(string $string, string $query, string $encoding = 'UTF-8'): bool
    {
        return mb_substr($string, 0, mb_strlen($query, $encoding), $encoding) === $query;
    }

    /**
     * Supports extended charsets, unlike native strtolower().
     *
     * @param string $string
     * @param string $encoding
     * @return string
     */
    public static function strToLower(string $string, string $encoding = 'UTF-8'): string
    {
        return mb_strtolower($string, $encoding);
    }

    /**
     * Supports extended charsets, unlike native strtoupper().
     *
     * @param string $string
     * @param string $encoding
     * @return string
     */
    public static function strToUpper(string $string, string $encoding = 'UTF-8'): string
    {
        return mb_strtoupper($string, $encoding);
    }

    /**
     * Prevents potential slowdown or DoS caused by feeding an extremely long string to a MySQL query.
     * Supports extended charsets.
     *
     * @param string $string
     * @param int $length
     * @param string $encoding
     * @return string
     */
    public static function truncateToMySQLVarcharMaxLength(
        string $string,
        int $length = 255,
        string $encoding = 'UTF-8'
    ): string
    {
        return mb_substr($string, 0, $length, $encoding);
    }

    /**
     * Prevents potential slowdown or DoS caused by hashing very long passwords.
     * Supports extended charsets.
     *
     * @param string $string
     * @param int $length
     * @param string $encoding
     * @return string
     */
    public static function truncateToPasswordEncoderMaxLength(
        string $string,
        int $length = 4096,
        string $encoding = 'UTF-8'
    ): string
    {
        return mb_substr($string, 0, $length, $encoding);
    }

    /**
     * Supports extended charsets, unlike native ucfirst().
     *
     * @param string $string
     * @param string $encoding
     * @return string
     */
    public static function ucFirst(string $string, ?string $encoding = 'UTF-8'): string
    {
        return mb_strtoupper(mb_substr($string, 0, 1, $encoding), $encoding) . mb_substr($string, 1, null, $encoding);
    }

    /**
     * Supports extended charsets, unlike native ucwords().
     *
     * @param string $string
     * @param string $encoding
     * @return string
     */
    public static function ucWords(string $string, ?string $encoding = 'UTF-8'): string
    {
        return mb_convert_case($string, MB_CASE_TITLE, $encoding);
    }
}

Example use

use App\Helper\StringHelper;

// [...]

$string = StringHelper::ucFirst('string');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment