PDA

Показать полную графическую версию : [решено] Редактирование java *.class в php


Страниц : 1 2 [3]

slonick2012@vk
10-05-2012, 01:34
ferget, :( Нет код немного не работает, Не правильно записывает значение, в hex оно верно, а в utf-8 нет. вот код

<?php
$mod = $_GET["mod"];
switch($mod) {
case false:
default:
echo '
<form action="?mod=result1" method="post">
<input name="c1" value="1" type="checkbox">
<input size="6" name="bb1" type="text"><br><br>
<input style="margin-top: 5px;" value="дальше »" type="submit"><br>
</form>
</body></html>';

break;
case result1:

function ascii2hex($ascii) {
if ($_POST['c1'] == '')
$bb1 = 'ав';
if ($_POST['c1'] == '1')
$bb1 = $_POST['bb1'];
$ascii = $bb1;
$hex = '';
for ($i = 0; $i < strlen($ascii); $i++) {
$byte = strtoupper(dechex(ord($ascii{$i})));
$byte = str_repeat('0', 2 - strlen($byte)).$byte;
$hex.=$byte." ";
}
return $hex;
}
$source_column2 = ascii2hex($source_column1);
$patterns[0] = "/ /";
$replacements[0] = "";
$binary = preg_replace($patterns, $replacements, $source_column2);
echo $binary;

$fd = fopen("fd.class", "rb");
$data = fread($fd, 316);
fseek($fd, 317);
$data2 = fread($fd, filesize("fd.class"));
fclose($fd);

$bb1 = $_POST['bb1'];
$test = strlen($bb1);
$test1 = $test/2;
if ($test1 <= 9)
{$zero = '0';
$test2 = $zero.$test1;}
else
{$test2 = $test1;}
$binary2 = pack("H" . 2, $test2);
$binary1 = pack("H" . $test, $binary);

$rand = "class/fd.class";
$fd = fopen("$rand", "w");
$fdata = $data.$binary2.$binary1.$data2;
fwrite($fd,$fdata);
fclose($fd);
break;}
?>
Английские буквы записываются нормально

ferget
10-05-2012, 05:32
подробнее опишите, какие именно значения вы записываете, что получается, что должно получится

slonick2012@vk
10-05-2012, 08:46
ferget, Ну вот когда записываю русский символ или какой-то иной символ (№%?...), в hex смотрю там все нормально, закидываю этот файл в игру, там выдает ошибку "Bad utf8 string"

ferget
10-05-2012, 09:43
проверьте как записывается

вот знак № в utf8 EF BB BF E2 84 96

slonick2012@vk
10-05-2012, 12:29
А в hex № B9, вот как его записать чтобы работало? Если просто В9 записать то ошибка.

slonick2012@vk
10-05-2012, 12:55
ferget, Вот в java classe он записывается иначе вот код для перекодирования, а мне получается нужен обратный код, сможете сделать?

$s='\u041f\u0440\u0435\u0432\u0435\u0434 \u041a\u0440\u0435\u0432\u0435\u0434\u043a\u043e!';

//чтобы перекодировать в нормальный вид можно пошаманить вот так
echo preg_replace('#\\\\u([0-9a-f]{4})#se','iconv("UTF-16BE","UTF-8",pack("H4","$1"))',$s);

slonick2012@vk
10-05-2012, 13:31
ferget, Символ № что бы работал нужно записать так в„– , не знаете как его так перекодировать?

ferget, Уже сделал скрипт конечно большой получился.




© OSzone.net 2001-2012