Прошу простить меня, но мне не ясна суть вопроса, а точнее, что именно у вас не выходит? Если не знаете, как получить исходный код страницы для дальнейшей обработки, то это функция file_get_contents, как пример. Но мне кажется, что это вы и так знаете. Так что же именно у вас не выходит?
Не ясен этот абзац:
С моей точки зрения, гибкий роутинг - это такой, который может быть легко заменён на любую альтернативную реализацию. Совместимость обеспечивается использованием объектно-ориентированного подхода с применением интерфейсов или через duck-typing.
Например, роутером может считаться класс, который реализует RoutingInterface (это согласно ООП) или содержит метод route(arguments) (это duck-typing).
Если не трудно, расскажите, пожалуйста, подробнее :)
От примеров никогда не отказывался, было бы тоже полезно.
Хорошо, то есть берём за основу то, что лучше составить карту маршрутов. Тут понятно, но а как дальше? Боюсь, что я не очень вас понял. У нас, получается, есть отдельный класс Router, например, исходя из ваших слов где она должна располагаться? В том же классе, как поле класса? Где должен быть сам запуск маршрута? Как, в таком случае, должны запускаться нужные мне методы контроллера согласно этой карте? С точки зрения безопасности, кроме того, что роутер - изолированная среда, есть ли ещё какие-то рекомендации?
Поясню, BOM - это, по сути, определённое количество в определённой последовательности байт, которые записываются в самом начале файла, для каждой кодировки эти байты, как и их количество, могут быть разными, для того, что бы программно удалить BOM - надо вырезать в начале эти байты, если надо добавить BOM, то, соответственно, добавить эти байты. А какие именно байты - написано в википедии по ссылке выше.
Алексей Уколов: про кодировки и формирование массива с данными POST понятно, но так и не ясны принципы выбора $request = $_POST и $request = file_get_contents('php://input')