Ability to detect zend multibyte mode at runtime
| Request #52348 | Ability to detect zend multibyte mode at runtime | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Submitted: | 2010-07-15 17:31 UTC | Modified: | 2010-11-25 15:55 UTC |
|
||||||||||
| From: | php-bugs at thequod dot de | Assigned: | kalle (profile) | |||||||||||
| Status: | Closed | Package: | PHP options/info functions | |||||||||||
| PHP Version: | 5.3.3RC3 | OS: | ||||||||||||
| Private report: | No | CVE-ID: | None | |||||||||||
[2010-07-15 17:31 UTC] php-bugs at thequod dot de
Description: ------------ I could not find (useful) documentation for the "enable-zend-multibyte" configure option. It is mentioned to be a requirement for declare(encoding) [1], but a) apparently the Windows builds do not have it enabled (according to phpinfo output b) I cannot see how this can get detected on runtime (e.g. via some defined function) - I need to know if declare(encoding) processing is being done or not (and convert source files manually if declare(encoding) is ignored). [1] http://php.net/manual/en/control-structures.declare.php
Patches
Pull Requests
History
AllCommentsChangesGit/SVN commits
[2010-10-23 15:19 UTC] kalle@php.net
-Status: Open +Status: Closed -Assigned To: +Assigned To: kalle
[2010-10-23 15:19 UTC] kalle@php.net
Hi, sadly the multibyte mode isn't exposed, so the only way to check for it is by sniffing phpinfo() which is really hacky. I wrote up a small script for you to see what I mean by hacky: <?php $zend_multibyte = false; ob_start(); phpinfo(INFO_GENERAL); $buffer = ob_get_clean(); $pos = strpos($buffer, 'Zend Multibyte'); $buffer = substr($buffer, $pos); if(PHP_SAPI == 'cli') { $buffer = ltrim($buffer); $zend_multibyte = (trim(substr($buffer, 25, strpos($buffer, "\n") - 25)) == 'enabled'); } else { $zend_multibyte = (trim(strip_tags(substr($buffer, 28, strpos($buffer, "</tr>") - 28))) == 'enabled'); } unset($buffer, $pos); var_dump($zend_multibyte); ?> As for the documentation, I have added a note on the declare() construct's page that its "impossible" to determine whether the build have multibyte support or not.[2010-10-23 17:46 UTC] php-bugs at thequod dot de
[2010-10-23 19:14 UTC] kalle@php.net
-Summary: Please document --enable-zend-multibyte configure option +Summary: Ability to detect zend multibyte mode at runtime -Status: Closed +Status: Re-Opened -Type: Documentation Problem +Type: Feature/Change Request -Package: Documentation problem +Package: PHP options/info functions
[2010-10-23 19:14 UTC] kalle@php.net
[2010-11-11 02:44 UTC] Kalle@php.net
-Status: Re-Opened +Status: Closed
[2010-11-11 02:44 UTC] Kalle@php.net
[2010-11-11 18:19 UTC] php-bugs at thequod dot de
[2010-11-25 15:55 UTC] cataphract@php.net
Someone on internals requested I added this here: «The problem in 5.3 is not as grave as the bug report paints it, you don't need to sniff phpinfo() to see whether PHP was compiled with --enable-zend-multibyte. You can use, for instance: key_exists("detect_unicode", ini_get_all())»