Тут вы не правы. Адресная строка для того и нужна, что бы передавать через нее параметры. И это вполне нормально, что в ней при смене языка один раз появится ?lang=eng. Вы бы лучше думали о том, что ваш сайт в английской версии индексироваться не будет. А это — проблема серьезнее.
Статическая переменная в данном случае нужна, что бы не проверять $_COOKIE и $_GET при следующих вызовах translate. И, как следствие, не использовать редирект и повторную отправку заголовков.
Я думаю вы не найдете такого способа. Вот если бы количество элементов в строке было фиксированным то это не сложно сделать. А у вас оно меняется, соответственно и расстояние между элементами не линейно зависит от ширины экрана. Обязательно надо вычислять расстояние.
Полный или урезанный MD5 — все равно требуется проверка на наличие сгенерированного шифра в базе. Тут следует говорить о вероятности повторения шифра двух разных строк. И чем короче шифр тем больше эта вероятность. И никакой другой алгоритм эту вероятность не уменьшит при одинаковом равномерном распределении результатов шифрования. Поэтому урезание MD5 вполне может применяться. Но лучше md5 брать не от времени а от самого URL к примеру. Если не уверены в равномерности md5 можно использовать генератор случайных чисел и потом преобразовывать числа в буквы по их коду. В любом случае будут повторы. Их можно исключать простым увеличением на единицу до тех пор пока шифр не станет уникальным. При равномерном распределении вам не понадобится много раз увеличивать шифр. Допустим у вас 45 млн комбинаций и 40 из них заняты. Тогда в среднем каждая 8 ячейка свободна. И так оно и будет на практике.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.