158 lines
3.5 KiB
PHP
158 lines
3.5 KiB
PHP
<?php
|
|
|
|
use \OpencachingDE\Conversions\Coordinates;
|
|
|
|
/***************************************************************************
|
|
* For license information see doc/license.txt
|
|
*
|
|
* Unicode Reminder メモ
|
|
***************************************************************************/
|
|
|
|
function mb_trim($str)
|
|
{
|
|
$bLoop = true;
|
|
while ($bLoop == true)
|
|
{
|
|
$sPos = mb_substr($str, 0, 1);
|
|
|
|
if ($sPos == ' ' || $sPos == "\r" || $sPos == "\n" || $sPos == "\t" || $sPos == "\x0B" || $sPos == "\0")
|
|
$str = mb_substr($str, 1, mb_strlen($str) - 1);
|
|
else
|
|
$bLoop = false;
|
|
}
|
|
|
|
$bLoop = true;
|
|
while ($bLoop == true)
|
|
{
|
|
$sPos = mb_substr($str, -1, 1);
|
|
|
|
if ($sPos == ' ' || $sPos == "\r" || $sPos == "\n" || $sPos == "\t" || $sPos == "\x0B" || $sPos == "\0")
|
|
$str = mb_substr($str, 0, mb_strlen($str) - 1);
|
|
else
|
|
$bLoop = false;
|
|
}
|
|
|
|
return $str;
|
|
}
|
|
|
|
// explode with more than one separator
|
|
function explode_multi($str, $sep)
|
|
{
|
|
$ret = array();
|
|
$nCurPos = 0;
|
|
|
|
while ($nCurPos < mb_strlen($str))
|
|
{
|
|
$nNextSep = mb_strlen($str);
|
|
for ($nSepPos = 0; $nSepPos < mb_strlen($sep); $nSepPos++)
|
|
{
|
|
$nThisPos = mb_strpos($str, mb_substr($sep, $nSepPos, 1), $nCurPos);
|
|
if ($nThisPos !== false)
|
|
if ($nNextSep > $nThisPos)
|
|
$nNextSep = $nThisPos;
|
|
}
|
|
|
|
$ret[] = mb_substr($str, $nCurPos, $nNextSep - $nCurPos);
|
|
|
|
$nCurPos = $nNextSep + 1;
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
function getSysConfig($name, $default)
|
|
{
|
|
return sql_value("SELECT `value` FROM `sysconfig` WHERE `name`='&1'", $default, $name);
|
|
}
|
|
|
|
function setSysConfig($name, $value)
|
|
{
|
|
sql("INSERT INTO `sysconfig` (`name`, `value`) VALUES ('&1', '&2') ON DUPLICATE KEY UPDATE `value`='&2'", $name, $value);
|
|
}
|
|
|
|
function read_file($filename, $maxlength)
|
|
{
|
|
$content = '';
|
|
|
|
$f = fopen($filename, 'r');
|
|
if ($f === false) return false;
|
|
|
|
while ($line = fread($f, 4096))
|
|
$content .= $line;
|
|
fclose($f);
|
|
|
|
return $content;
|
|
}
|
|
|
|
// encodes &<>"'
|
|
function xmlentities($str)
|
|
{
|
|
return htmlspecialchars(xmlfilterevilchars($str), ENT_QUOTES, 'UTF-8');
|
|
}
|
|
|
|
// encodes &<>
|
|
// This is ok for XML content text between tags, but not for XML attribute contents.
|
|
function text_xmlentities($str)
|
|
{
|
|
return htmlspecialchars(xmlfilterevilchars($str), ENT_NOQUOTES, 'UTF-8');
|
|
}
|
|
|
|
function xmlfilterevilchars($str)
|
|
{
|
|
// the same for for ISO-8859-1 and UTF-8
|
|
return mb_ereg_replace('[\x{00}-\x{09}\x{0B}\x{0C}\x{0E}-\x{1F}]*', '', $str);
|
|
}
|
|
|
|
|
|
function escape_javascript($text)
|
|
{
|
|
return str_replace('\'', '\\\'', str_replace('"', '"', $text));
|
|
}
|
|
|
|
|
|
// perform str_rot13 without renaming parts in []
|
|
function str_rot13_gc($str)
|
|
{
|
|
$delimiter[0][0] = '[';
|
|
$delimiter[0][1] = ']';
|
|
|
|
$retval = '';
|
|
|
|
while (mb_strlen($retval) < mb_strlen($str))
|
|
{
|
|
$nNextStart = false;
|
|
$sNextEndChar = '';
|
|
foreach ($delimiter AS $del)
|
|
{
|
|
$nThisStart = mb_strpos($str, $del[0], mb_strlen($retval));
|
|
|
|
if ($nThisStart !== false)
|
|
if (($nNextStart > $nThisStart) || ($nNextStart === false))
|
|
{
|
|
$nNextStart = $nThisStart;
|
|
$sNextEndChar = $del[1];
|
|
}
|
|
}
|
|
|
|
if ($nNextStart === false)
|
|
{
|
|
$retval .= str_rot13(mb_substr($str, mb_strlen($retval), mb_strlen($str) - mb_strlen($retval)));
|
|
}
|
|
else
|
|
{
|
|
// crypted part
|
|
$retval .= str_rot13(mb_substr($str, mb_strlen($retval), $nNextStart - mb_strlen($retval)));
|
|
|
|
// uncrypted part
|
|
$nNextEnd = mb_strpos($str, $sNextEndChar, $nNextStart);
|
|
|
|
if ($nNextEnd === false)
|
|
$retval .= mb_substr($str, $nNextStart, mb_strlen($str) - mb_strlen($retval));
|
|
else
|
|
$retval .= mb_substr($str, $nNextStart, $nNextEnd - $nNextStart + 1);
|
|
}
|
|
}
|
|
|
|
return $retval;
|
|
}
|