Ладно, фигня, по привычке нажимаю назад. И что я вижу? Вижу версию, которую сохранял до этого, а все, что успел написать после, ушло в никуда. Сразу жму вперед, мне предлагают заново отослать данные для отображения страницы. Значит в памяти фаерфокса все сохранено, осталось только достать. Фаербаг показывает только часть отосланного - говорит, его ограничения не позволяют показать все полностью. После получаса матов и гугления, попросил помочь php-программера. Он все-таки нашел фичу в фаербаге. Чтобы получить отсылаемые данные полностью, надо включить Net Monitoring, на строке Post при отсылке данных вызвать контекстное меню и клацнуть на "Copy location with parameters". После чего останется только слабать программку, которая декодирует из x-www-form-urlencoded назад в обычный текст. В общем, все закончилось хорошо. Запись укоротил, перейдя на короткие ссылки на картах Гугля. Но вот если бы не стоял у меня фаербаг...
Какого фига ЖЖ не выдало вместе с ошибкой сам текст, чтобы я его исправил? Какого фига при нажатии на "Назад" ФФ показывает мне не ту страницу, с которой я ушел? Почему вообще нет стандартной фичи для доступа к отсылаемым данным? Подобная ошибка довольно частая из-за херового юзабилити блогов и форумов. К тому же при попытке отсылки может банально сбойнуть интернет-провайдер.
Теперь всегда сначала жму на "Просмотр", только потом на окончательную кнопку. Так и до паранойи недалеко.
Исходник для декодирования x-www-form-urlencoded назад в строку на Java:
import java.net.*;
import java.io.*;
public class URLDecode
{
public static void main( String[] args ) throws Exception
{
File in = new File( args[0] );
File out = new File( args[1] );
out.createNewFile();
final int BUFFER_SIZE = 1024;
char[] buf = new char[BUFFER_SIZE];
FileReader fr = new FileReader( in );
StringBuilder sb = new StringBuilder( BUFFER_SIZE );
try
{
int i;
while( ( i = fr.read( buf ) ) != -1 )
{
sb.append( buf, 0, i );
}
}
finally
{
fr.close();
}
String s = URLDecoder.decode( sb.toString(), "utf-8" );
FileWriter fw = new FileWriter( out );
try
{
fw.write( s );
}
finally
{
fw.close();
}
}
}