Чтобы обратиться к локальному DTD при использовании PHP SimpleXML, мне нужно преобразовать абсолютный путь в URI типа файла. Например, конвертируйте /home/sitename/www/xml/example.dtd в файл: ///home/sitename/www/xml/example.dtd.PHP абсолютный путь к файлу URI
В приведенном примере это достаточно просто, поскольку все, что требуется, - это добавить схему «файл» перед дорожкой. Но если возникает такая ситуация, например, что в одном из имен каталогов есть пробел, это недостаточно. Механизм должен работать на Windows или Linux и допускать символы не-ASCII в именах каталогов.
код разработан до сих пор является:
$absparts = explode('/', _ALIRO_ABSOLUTE_PATH);
$driveletter = (0 == strncasecmp(PHP_OS, 'win', 3)) ? array_shift($absparts) : '';
$filename = $driveletter.implode('/', array_map('rawurlencode', $absparts)).'/xml/'.$filename.'.dtd';
$href = 'file:///'.$filename;
, где определен символ абсолютного пути к корневой системе (всегда с пересылает слэши), ОТД находится в подкаталоге XML, и имеет название $ filename, за которым следует расширение .dtd.
Будет ли это работать правильно? Есть ли лучший подход?
Позвольте мне объяснить немного больше фона. Цель состоит в анализе XML-документа с использованием SimpleXML. Это делается с помощью функции simplexml_load_string() с опцией LIBXML_DTDVALID. XML-документ будет содержать настоящий URI, указывающий на домашний веб-сайт, но я не хочу вводить задержки, связанные с достижением удаленного веб-сайта, или загружать домашний веб-сайт с запросами. Поэтому ссылка на DTD отредактирована таким образом, чтобы ссылаться на локальный компьютер. Но он должен быть встроен в URI внутри DOCTYPE внутри XML-документа. Ограничения не являются моим выбором, они неявны в правилах для DOCTYPE и выполняются функцией SimpleXML. Я могу решить, где файл находится как абсолютный путь, но чтобы поместить его в DOCTYPE, он должен быть преобразован в URI.
У меня не было времени посмотреть на код.Просто не забывайте о путях UNC: \\ server \ share \ folder –
Каким будет правильное преобразование пути такого типа в URI? – user185631