3v4l.org

run code in 300+ PHP versions simultaneously
<? // Кодировка текста кода и текста страницы 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