<?
// Кодировка текста кода и текста страницы UTF8
header('Content-Type: text/html; charset=utf-8');
?>
<form method="POST">
<div>
HEX строка:<br>
<textarea name="bdata" rows="5" cols="80"><?if (isset($_POST['bdata'])) echo htmlspecialchars($_POST['bdata']);?></textarea><br>
<br>
Искомый текст (если не требуется замена, оставить пустым):<br>
<input type="text" name="text_src" size="75" value="<?if (isset($_POST['text_src'])) echo htmlspecialchars($_POST['text_src']);?>"><br>
Новый текст (если не требуется замена, оставить пустым):<br>
<input type="text" name="text_dst" size="75" value="<?if (isset($_POST['text_dst'])) echo htmlspecialchars($_POST['text_dst']);?>"><br>
<br>
Искомое имя шрифта (если не требуется замена, оставить пустым):<br>
<input type="text" name="font_src" size="40" value="<?if (isset($_POST['font_src'])) echo htmlspecialchars($_POST['font_src']);?>"><br>
Новое имя шрифта (если не требуется замена, оставить пустым):<br>
<input type="text" name="font_dst" size="40" value="<?if (isset($_POST['font_dst'])) echo htmlspecialchars($_POST['font_dst']);?>"><br>
<br>
Искомый размер шрифта (если не требуется замена, оставить пустым):<br>
<input type="number" name="font_size_src" size="5" min="1" max="128" value="<?if (isset($_POST['font_size_src'])) echo htmlspecialchars($_POST['font_size_src']);?>"><br>
Новый размер шрифта (если не требуется замена, оставить пустым):<br>
<input type="number" name="font_size_dst" size="5" min="1" max="128" value="<?if (isset($_POST['font_size_dst'])) echo htmlspecialchars($_POST['font_size_dst']);?>"><br>
<br>
Искомый цвет шрифта (в формате aabbcc, если не требуется замена, оставить пустым):<br>
<input type="text" name="text_color_src" size="10" value="<?if (isset($_POST['text_color_src'])) echo htmlspecialchars($_POST['text_color_src']);?>"><br>
Новый цвет шрифта (в формате aabbcc, если не требуется замена, оставить пустым):<br>
<input type="text" name="text_color_dst" size="10" value="<?if (isset($_POST['text_color_dst'])) echo htmlspecialchars($_POST['text_color_dst']);?>"><br>
<br>
<input type="submit" value="Заменить">
</div>
</form>
<?
if (!isset($_POST['bdata']))
die();
// Функция формирования UTF16 фрагмента (на выходе и выходе строка)
function utf16($utf8Text) {
return "(\xfe\xff".addcslashes(mb_convert_encoding($utf8Text, 'UTF-16', 'UTF-8'), '()\\').")";
};
// Функция преобразования в HEX формат (на выходе и выходе строка)
function hex($text)
{
return reset(unpack('H*', $text));
}
function color($hex)
{
$color = @pack('H*', $hex);
if (strlen($color) != 3)
return 'ERROR';
$c1 = ord($color[0]);
$c2 = ord($color[1]);
$c3 = ord($color[2]);
$c1 = ($c1 == 255) ? '1.0' : substr(round($c1 / 255, 5), 1);
$c2 = ($c2 == 255) ? '1.0' : substr(round($c2 / 255, 5), 1);
$c3 = ($c3 == 255) ? '1.0' : substr(round($c3 / 255, 5), 1);
return "[ 1.0 $c1 $c2 $c3 ]";
}
// Начало текста в блоке
$textPrefix = ' /1 [ << /0 << /0 ';
// Начало описания шрифта
$fontPrefix = ' << /0 << /99 /CoolTypeFont /0 << /0 ';
// Начало описания первого шрифта в блоке
$firstFontPrefix = ' /0 ['.$fontPrefix;
// Начало описания размера шрифта
$fontSizePrefix = ' /5 0 /6 << /0 0 /1 ';
// Начало описания цвета шрифта
$fontColorPrefix = ' /SimplePaint /0 << /0 1 /1 ';
// Конец описания цвета шрифта
$fontColorSufix = ' >> ';
$bdata = $_POST['bdata'];
$binData = pack('H*', $bdata);
if (preg_match_all('/'.preg_quote($fontPrefix, '/').'\(\xfe\xff((?:[^\\\\)]|\\\\.)*)\)/m', $binData, $fonts))
{
$fonts = $fonts[1];
if ($fonts)
{
echo 'Список найденных шрифтов:<br>';
foreach ($fonts as $str)
echo mb_convert_encoding(stripslashes($str), 'UTF-8', 'UTF-16').'<br>';
echo '<br>';
}
}
if (preg_match_all('/'.preg_quote($textPrefix, '/').'\(\xfe\xff((?:[^\\\\)]|\\\\.)*)\)/m', $binData, $fonts))
{
$fonts = $fonts[1];
if ($fonts)
{
echo 'Список найденных текстов:<br>';
foreach ($fonts as $str)
echo mb_convert_encoding(stripslashes($str), 'UTF-8', 'UTF-16').'<br>';
echo '<br>';
}
}
// Замена текста
if (isset($_POST['text_src'], $_POST['text_dst']) && $_POST['text_src'] && $_POST['text_dst'])
{
// Формируем строки поиска и замены
// !!! В конце всех строк видимо присутствует символ с символом 13 (0d).
$oldTextStr = hex($textPrefix.utf16($_POST['text_src']."\x0d"));
$newTextStr = hex($textPrefix.utf16($_POST['text_dst']."\x0d"));
// Ищем
if (strpos($bdata, $oldTextStr) === false)
echo 'Искомый текст не найден, замена не произведена.<br>';
else
{
// Меняем
$bdata = str_replace($oldTextStr, $newTextStr, $bdata);
echo 'Произведена замена текста.<br>';
}
}
// Замена имени шрифта
if (isset($_POST['font_src'], $_POST['font_dst']) && $_POST['font_src'] && $_POST['font_dst'])
{
// Формируем строки поиска и замены
// !!! Если возникнут сложности или шрифтов несколько в блоке,
// в место префикса $firstFontPrefix используем префикс $fontPrefix
$oldFontStr = hex($firstFontPrefix.utf16($_POST['font_src']));
$newFontStr = hex($firstFontPrefix.utf16($_POST['font_dst']));
// Ищем
if (strpos($bdata, $oldFontStr) === false)
echo 'Искомый шрифт не найден, замена не произведена.<br>';
else
{
// Меняем
$bdata = str_replace($oldFontStr, $newFontStr, $bdata);
echo 'Произведена замена шрифта.<br>';
}
}
// Замена размера шрифта
if (isset($_POST['font_size_src'], $_POST['font_size_dst']) && $_POST['font_size_src'] && $_POST['font_size_dst'])
{
// Формируем строки поиска и замены
$oldFontStr = hex($fontSizePrefix.intval($_POST['font_size_src']).'.0');
$newFontStr = hex($fontSizePrefix.intval($_POST['font_size_dst']).'.0');
// Ищем
if (strpos($bdata, $oldFontStr) === false)
echo 'Искомый размер шрифта не найден, замена не произведена.<br>';
else
{
// Меняем
$bdata = str_replace($oldFontStr, $newFontStr, $bdata);
echo 'Произведена замена размера шрифта.<br>';
}
}
// Замена цвета шрифта
if (isset($_POST['text_color_src'], $_POST['text_color_dst']) && $_POST['text_color_src'] && $_POST['text_color_dst'])
{
// Формируем строки поиска и замены
$oldFontStr = hex($fontColorPrefix.color($_POST['text_color_src']).$fontColorSufix);
$newFontStr = hex($fontColorPrefix.color($_POST['text_color_dst']).$fontColorSufix);
// Ищем
if (strpos($bdata, $oldFontStr) === false)
echo 'Искомый цвет шрифта не найден, замена не произведена.<br>';
else
{
// Меняем
$bdata = str_replace($oldFontStr, $newFontStr, $bdata);
echo 'Произведена замена цвета шрифта.<br>';
}
}
?>
<br>
<form>
<div>
Новая HEX строка:<br>
<textarea name="bdata" rows="5" cols="80"><?=htmlspecialchars($bdata);?></textarea>
</div>
</form>
preferences:
35.84 ms | 402 KiB | 5 Q