From:             mike at skew dot org
Operating system: FreeBSD 8.4-RELEASE
PHP version:      5.4.17
Package:          DOM XML related
Bug Type:         Feature/Change Request
Bug description:baseURI should always be a real URI

Description:
------------
When loading an XML document from memory (string, file, whatever), such as
via 
DOMDocument::loadXml(), PHP tells libxml to use the current working
directory, 
or I think sometimes the script's folder path, as the base URI. libxml (and

PHP's thin API) expose this value as the baseURI property in the DOM,
overriding 
it only as needed when xml:base is in scope.

As pointed out in the comments on Bug #44367, neither PHP nor libxml claim
to 
support DOM Core Level 3, so maybe this PHP/libxml "baseURI" property
shouldn't 
be expected to behave as it would in a L3-compliant DOM. Nevertheless, I
think 
it's reasonable to expect that something called "baseURI" would in fact be

formatted as a URI, thus making it useful as an actual base URI for
resolving 
URI references like href attribute values in XHTML documents and Atom
feeds.

So, my request is that the path be prefixed with "file://", at the very
least. 
This will have the added benefit of making things forward-compatible with
DOM 
Core L3, if such support is intended for the future.

Also, my experience with XML apps suggests that a more typical default
would be 
a file URI corresponding to the script itself, rather than the cwd or
script 
folder. This would have no effect on resolution of relative references
(except 
an empty string), so it seems harmless in that regard. However, I would 
understand if there's a desire to avoid disclosing the script's file name
in the 
DOM.

Test script:
---------------
<?php
$xml_string = "<greeting>hello world</greeting>";
$doc = new DOMDocument();
$doc->loadXml($xml_string);
$document_base = $doc->baseURI;
$document_element_base = $doc->documentElement->baseURI;
echo "  DOMDocument->baseURI = " . $document_base;
// A URI, as opposed to a URI reference, is always absolute.
// That is, it has a scheme/protocol (something before ":").
echo (strpos($document_base, ":") == false ? " (not a real URI!)" : "
(probably OK!)") . "\n";
echo "  DocumentElement->baseURI = " . $document_element_base;
echo (strpos($document_element_base, ":") == false ? " (not a real URI!)" :
" (probably OK!)") . "\n";
?>

Expected result:
----------------
  DOMDocument->baseURI = file:///usr/home/x/ (probably OK!)
  DocumentElement->baseURI = file:///usr/home/x/ (probably OK!)

Actual result:
--------------
  DOMDocument->baseURI = /usr/home/x/ (not a real URI!)
  DocumentElement->baseURI = /usr/home/x/ (not a real URI!)

-- 
Edit bug report at https://bugs.php.net/bug.php?id=65364&edit=1
-- 
Try a snapshot (PHP 5.4):   
https://bugs.php.net/fix.php?id=65364&r=trysnapshot54
Try a snapshot (PHP 5.3):   
https://bugs.php.net/fix.php?id=65364&r=trysnapshot53
Try a snapshot (trunk):     
https://bugs.php.net/fix.php?id=65364&r=trysnapshottrunk
Fixed in SVN:               https://bugs.php.net/fix.php?id=65364&r=fixed
Fixed in release:           https://bugs.php.net/fix.php?id=65364&r=alreadyfixed
Need backtrace:             https://bugs.php.net/fix.php?id=65364&r=needtrace
Need Reproduce Script:      https://bugs.php.net/fix.php?id=65364&r=needscript
Try newer version:          https://bugs.php.net/fix.php?id=65364&r=oldversion
Not developer issue:        https://bugs.php.net/fix.php?id=65364&r=support
Expected behavior:          https://bugs.php.net/fix.php?id=65364&r=notwrong
Not enough info:            
https://bugs.php.net/fix.php?id=65364&r=notenoughinfo
Submitted twice:            
https://bugs.php.net/fix.php?id=65364&r=submittedtwice
register_globals:           https://bugs.php.net/fix.php?id=65364&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=65364&r=php4
Daylight Savings:           https://bugs.php.net/fix.php?id=65364&r=dst
IIS Stability:              https://bugs.php.net/fix.php?id=65364&r=isapi
Install GNU Sed:            https://bugs.php.net/fix.php?id=65364&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=65364&r=float
No Zend Extensions:         https://bugs.php.net/fix.php?id=65364&r=nozend
MySQL Configuration Error:  https://bugs.php.net/fix.php?id=65364&r=mysqlcfg

Reply via email to