Skip to content

Instantly share code, notes, and snippets.

View stemar's full-sized avatar

Steven Marshall stemar

View GitHub Profile
@stemar
stemar / mb_str_split.php
Last active January 18, 2024 11:27
Multibyte str_split(). The mbstring library PHP < 7.x doesn’t come with a multibyte equivalent of str_split(). This function behaves like mb_str_split in PHP > 7.x
<?php
function mb_str_split($string, $length = 1, $encoding = NULL) {
if (!is_null($string) && !is_scalar($string)) {
$type = gettype($string) === 'object' ? get_class($string) : gettype($string);
throw new \Exception(sprintf('mb_str_split(): Argument #1 ($string) must be of type string, %s given', $type));
}
if ((!is_null($length) && !is_numeric($length)) || $length === '') {
$type = gettype($length) === 'object' ? get_class($length) : gettype($length);
throw new \Exception(sprintf('mb_str_split(): Argument #2 ($string) must be of type int, %s given', $type));
}
@stemar
stemar / gist:327e34a0b2bebd11adb5
Last active January 18, 2024 10:50
Adding target="_blank" or any other attribute to a Markdown link
Markdown:
[JP Markdown](https://wordpress.org/plugins/jetpack-markdown){.target-blank .rel-nofollow}
JavaScript (just before the closing </body> tag):
<script>
jQuery('.target-blank').attr('target', '_blank').removeClass('target-blank').filter('[title=""]').removeAttr('title').filter('[class=""]').removeAttr('class');
jQuery('.rel-nofollow').attr('rel', 'nofollow').removeClass('rel-nofollow').filter('[title=""]').removeAttr('title').filter('[class=""]').removeAttr('class');
</script>
Post-jQuery HTML:
@stemar
stemar / numeric_format.php
Last active April 19, 2023 05:18
Localize numeric value using encapsulated NumberFormatter functions
<?php
/**
* Localize numeric value using encapsulated NumberFormatter functions
*
* @param float $amount
* @param array $kwargs
* @link https://www.php.net/manual/en/numberformatter.format.php
* @link https://www.php.net/manual/en/numberformatter.create.php
* @link https://www.php.net/manual/en/class.locale.php
* @return string|false
@stemar
stemar / datetime_format.php
Last active April 4, 2023 00:44
Localize datetime using encapsulated IntlDateFormatter functions
<?php
/**
* Localize datetime using encapsulated IntlDateFormatter functions
*
* @param IntlCalendar|DateTimeInterface|array|string|int|float $datetime
* @param array $kwargs
* @link https://www.php.net/manual/en/intldateformatter.format.php
* @link https://www.php.net/manual/en/intldateformatter.create.php
* @link https://www.php.net/manual/en/class.locale.php
* @return string|false
@stemar
stemar / currency_format.php
Last active April 4, 2023 00:44
Localize currency using encapsulated NumberFormatter functions
<?php
/**
* Localize currency using encapsulated NumberFormatter functions
*
* @param float $amount
* @param array $kwargs
* @link https://www.php.net/manual/en/numberformatter.formatcurrency.php
* @link https://www.php.net/manual/en/numberformatter.create.php
* @link https://www.php.net/manual/en/class.locale.php
* @return string|false
@stemar
stemar / vardump.php
Created September 15, 2019 05:52
PHP var_dump() without newline after =>
<?php
/**
* PHP var_dump() without newline after => .
*
* NOTE: The only issue is when a string value has `=>\n[ ]+`, it will get converted to `=> `
* @link https://www.php.net/manual/en/function.var-dump.php
*/
function vardump($value, $return=FALSE) {
ob_start();
var_dump($value);
@stemar
stemar / sanitize_input_array.php
Last active January 18, 2023 22:37
Filter out non-allowed parameters in the request input and protect parameter values against XSS.
<?php
/**
* Filter out non-allowed parameters in the request input and protect parameter values against XSS
*
* @param int $type INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV
* @param array $allowed_params
* @link https://www.php.net/manual/en/function.filter-input-array.php
* @return array
*/
function sanitize_input_array($type, array $allowed_params) {
@stemar
stemar / array_map_recursive.php
Created January 18, 2023 07:17
Recursive array_map()
<?php
function array_map_recursive($callback, $array) {
$func = function ($item) use (&$func, &$callback) {
return is_array($item) ? array_map($func, $item) : call_user_func($callback, $item);
};
return array_map($func, $array);
}
@stemar
stemar / mb_substr_replace.php
Last active December 24, 2022 19:41
Multibyte substr_replace(). The mbstring library PHP < 7.x doesn’t come with a multibyte equivalent of substr_replace(). This function behaves exactly like substr_replace() even when the arguments are arrays.
<?php
function mb_substr_replace($string, $replacement, $start, $length=NULL) {
if (is_array($string)) {
$num = count($string);
// $replacement
$replacement = is_array($replacement) ? array_slice($replacement, 0, $num) : array_pad(array($replacement), $num, $replacement);
// $start
if (is_array($start)) {
$start = array_slice($start, 0, $num);
foreach ($start as $key => $value)
@stemar
stemar / varexport.php
Last active December 22, 2022 05:06
PHP var_export() with short array syntax (square brackets) indented 2 spaces.
<?php
/**
* PHP var_export() with short array syntax (square brackets) indented 2 spaces.
*
* NOTE: The only issue is when a string value has `=>\n[`, it will get converted to `=> [`
* @link https://www.php.net/manual/en/function.var-export.php
* @param mixed $expression
* @param bool $return
* @return string
*/