Работа с кодировкой UTF-8 в php - PullRequest
       24

Работа с кодировкой UTF-8 в php

0 голосов
/ 07 сентября 2011

Я уже давно борюсь с кодировкой UTF-8, и до сих пор меня не устраивают некоторые вещи.

У меня есть веб-страница, которая позволяет клиентам создавать HTML-файлы и каталоги на сервере. Название каталога может быть на любом языке. Adiós, días, chapter, level и т. Д. Созданные каталоги позже используются как URL для созданных HTML-файлов. Допустим, пользователь создал каталог Adiós, а затем файл с именем welcome.html. Чтобы просмотреть этот файл, клиент нажимает на ссылку, и для этого я получаю каталог и имя файла, чтобы создать путь Adiós/welcome.html. Теперь я запутался в этих вещах.

  1. Когда я создаю каталог в php, я должен urlencode() каждый файл и имя каталога?

  2. Если я введу urlencode имя каталога, сможет ли браузер открыть мою HTML-страницу? Вместо href="Adiós/welcome.html" это будет href="Adi%C3%B3s/welcome.html".

  3. Иногда на моей веб-странице есть изображение, которое я буду обозначать "Adi%C3%B3s/ing.jpg"; это сработает?

  4. Должен ли URL в адресной строке показывать символы не ASCII?

Я на самом деле urlencode() d все, но столкнулся с проблемами, как описано в пунктах 2 и 3, поэтому я хотел знать, каков правильный подход к именованию каталогов при работе с языками, отличными от английского!

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

Если вы сохраняете имена, закодированные в файловой системе, вы должны удвоить urlencode ссылок и источников изображений, если хотите получить к ним прямой доступ, минуя PHP. В качестве альтернативы, вы можете сохранить имена без какого-либо urlencoding, в этом случае ссылки потребуются один проход. Однако этот последний параметр недоступен в Windows, где Unicode не поддерживается в функциях файловой системы.

В качестве альтернативы, если вы все еще хотите обойти PHP, вы можете использовать правила перезаписи, чтобы перекодировать имена после их кодирования в Apache.

Наконец, вы должны принять к сведению, что ваш подход опасен - его сложно понять без последствий для безопасности. Вы должны рассмотреть один файл PHP, обслуживающий ваши страницы и сохраняющий их в базе данных. Вы все еще можете сохранить красивые имена файлов, используя переменную PATH_INFO. Вы также можете добавить слой кэширования перед PHP, если производительность становится проблемой с этим решением.

1 голос
/ 07 сентября 2011
  1. Это зависит от базовой ОС (IMHO Linux способен обрабатывать имена файлов UTF-8, Windows - нет)
  2. обычно браузер должен просто запрашивать и открывать файлы типа /tülüvkrü.htm, я не понимаю, как MS IE обрабатывает такие вещи;
  3. [так же, как второй]
  4. уверен, если имя файла содержит их; как указано для 2. и 3., это зависит от используемого браузера;

Пример: http://tülüvkrü.de/中华人民共和国.htm (должно отображаться «Это работает!»)

0 голосов
/ 07 сентября 2011

У меня есть веб-страница, которая позволяет клиентам создавать HTML-файлы и папки на сервере.

Это неправильная идея.
Хранить их файлы в базе данных и эмулировать структуру каталогов.

РЕДАКТИРОВАТЬ из-за этих глупых обвинений в комментариях, которые я должен уточнить:1008 *

Я говорю об этом самом случае файлов HTML с причудливыми именами в частности, а не двоичных файлов в целом.

удовлетворен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...