<?php
/***************************************************************************
- * Copyright (C) 2003-2010 Polytechnique.org *
+ * Copyright (C) 2003-2011 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
***************************************************************************/
-function quoted_printable_encode($input, $line_max = 76)
-{
- $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
- $eol = "\n";
- $linebreak = "=0D=0A=\n ";
- $escape = "=";
- $output = "";
+// Use native function if it's available (>= PHP5.3)
+if (!function_exists('quoted_printable_encode')) {
+ function quoted_printable_encode($input, $line_max = 76)
+ {
+ $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
+ $eol = "\n";
+ $linebreak = "=0D=0A=\n ";
+ $escape = "=";
+ $output = "";
- foreach ($lines as $j => $line) {
- $linlen = strlen($line);
- $newline = "";
- for($i = 0; $i < $linlen; $i++) {
- $c = $line{$i};
- $dec = ord($c);
- if ( ($dec == 32) && ($i == ($linlen - 1)) ) {
- // convert space at eol only
- $c = "=20";
- } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) {
- // always encode "\t", which is *not* required
- $c = $escape.strtoupper(sprintf("%02x",$dec));
- }
- if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted
- $output .= $newline.$escape.$eol;
- $newline = " ";
- }
- $newline .= $c;
- } // end of for
- $output .= $newline;
- if ($j<count($lines)-1) $output .= $linebreak;
+ foreach ($lines as $j => $line) {
+ $linlen = strlen($line);
+ $newline = "";
+ for($i = 0; $i < $linlen; $i++) {
+ $c = $line{$i};
+ $dec = ord($c);
+ if ( ($dec == 32) && ($i == ($linlen - 1)) ) {
+ // convert space at eol only
+ $c = "=20";
+ } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) {
+ // always encode "\t", which is *not* required
+ $c = $escape.strtoupper(sprintf("%02x",$dec));
+ }
+ if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted
+ $output .= $newline.$escape.$eol;
+ $newline = " ";
+ }
+ $newline .= $c;
+ } // end of for
+ $output .= $newline;
+ if ($j<count($lines)-1) $output .= $linebreak;
+ }
+ return trim($output);
}
- return trim($output);
}
/** genere une chaine aleatoire de 22 caracteres ou moins
return new DateTime("@$date");
} else {
try {
+ $list = explode('/', $date);
+ if (count($list) == 3) {
+ $date = $list[1] . '/' . $list[0] . '/' . $list[2];
+ }
+ // FIXME: On PHP < 5.3, parsing error are reported using an error,
+ // not an exception. Thus count the number of error to detect
+ // errors.
+ $errors = @count($GLOBALS['pl_errors']);
$d = new DateTime($date);
+ if (@count($GLOBALS['pl_errors']) > $errors) {
+ return null;
+ }
return $d;
} catch (Exception $e) {
return null;
// }
}
+/** Get the first n characters of the string
+ */
+function left($string, $count)
+{
+ return substr($string, 0, $count);
+}
+
+/** Get the last n characters of the string
+ */
+function right($string, $count)
+{
+ return substr($string, -$count);
+}
+
+/** Check if a string is a prefix for another one.
+ */
+function starts_with($string, $prefix, $caseSensitive = true)
+{
+ $prefixLen = strlen($prefix);
+ if (strlen($string) < $prefixLen) {
+ return false;
+ }
+ $part = left($string, $prefixLen);
+ if ($caseSensitive) {
+ return strcmp($prefix, $part) === 0;
+ } else {
+ return strcasecmp($prefix, $part) === 0;
+ }
+}
+
+/** Check if a string is a suffix for another one.
+ */
+function ends_with($string, $suffix, $caseSensitive = true)
+{
+ $suffixLen = strlen($suffix);
+ if (strlen($string) < $suffixLen) {
+ return false;
+ }
+ $part = right($string, $suffixLen);
+ if ($caseSensitive) {
+ return strcmp($suffix, $part) === 0;
+ } else {
+ return strcasecmp($suffix, $part) === 0;
+ }
+}
+
+/** Check if the input data can be seen as an integer.
+ */
+function can_convert_to_integer($data)
+{
+ return is_int($data) || ctype_digit($data);
+}
+
+/** Interpret the input data as an integer or return false.
+ */
+function to_integer($data)
+{
+ if (!can_convert_to_integer($data)) {
+ return false;
+ }
+ return intval($data);
+}
+
+
// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
?>