PHP: Text trimming, value dumping and MIME encoding
September 5, 2011
While working on various web projects written completely in PHP, I collected some custom procedures for more satisfying work.
Text trimming
Often you are in need of trimming some text by set number of characters, but do not want to trim mid-word. This is a function which cuts text between words trying to reduce string length to be less than provided value.
// Cut text at set length,
// preserving words and appending
// ellipsis at the end of trimmed string
function my_ellipsis_trim($text, $length)
{
$count = strlen($text);
$tlen = $length - 3;
// If text is shorter than needed length,
// return it untouched
if ($tlen > $count) {
return $text;
} else {
// Searching index of last space in the string
// So text will be cut at last whole word
for ($cutidx = $tlen; $cutidx >= 0; $cutidx--) {
if ($text{$cutidx} == " ") break;
}
return substr($text, 0, $cutidx) . " ...";
}
}
Pretty-printing values of variables
So, you are a web developer. Why are you have to use such
stdout
-oriented functions as echo
or print
? We will dump variables
of any complexity using HTML format.
Additionally, as we know about the existence of highlight.js, we want to colorize the output if it is sufficiently complex.
// $data is a value to dump
// $caption will be printed as a header before the $data
// $method controls selection of internal printing function
// choice is between 'print_r' and 'var_dump'
// $is_code marks if the data should be wrapped in <code> tag
// for processing it with highlight.js
// $escape controls if the data should be processed
// by htmlspecialchars
// returns string containing formatted $data dump
function my_report(
$data,
$caption = 'Data',
$method = 'print_r',
$is_code = false,
$escape = true
) {
$result = '<pre><strong>'.$caption.' : </strong></pre><pre>';
$result .= $is_code ? '<code>' : '';
ob_start();
switch ($method){
case 'print_r':
print_r($data); break;
case 'var_dump':
var_dump($data); break;
default:
print_r($data);
}
$a = ob_get_contents();
ob_end_clean();
// Escape every HTML special chars (especially &rt; and < )
$b = $escape ? htmlspecialchars($a, ENT_QUOTES) : $a;
$result .= $b;
$result .= $is_code ? '</code>' : '';
$result .= '</pre>';
return $result;
}
MIME encoding of strings
When sending e-mail letters in real multi-national world you need to declare character encoding on almost anything. To do this in e-mail headers, you should wrap your header content in special encoding declaration and convert it to Base64. To speed-up this process, I wrote small helper function.
function my_mime_header($string, $encoding=null) {
if(!$encoding) $encoding = mb_internal_encoding();
return "=?$encoding?B?" . base64_encode($string) . "?=";
}
Inspired by comment to mb_encode_mimeheader() at php.net.