php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #52348 Ability to detect zend multibyte mode at runtime
Submitted: 2010-07-15 17:31 UTC Modified: 2010-11-25 15:55 UTC
Votes:2
Avg. Score:5.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:1 (50.0%)
Same OS:2 (100.0%)
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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: php-bugs at thequod dot de
New email:
PHP Version: OS:

 

 [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 commitsRelated reports
 [2010-10-23 15:19 UTC] kalle@php.net
Automatic comment from SVN on behalf of kalle
Revision: http://svn.php.net/viewvc/?view=revision&revision=304658
Log: Added remark about zend-multibyte mode, that its only exposed by phpinfo() (Bug #52348)
 [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
Thank you!

Can you forward / re-assign the bug maybe so that it is possible to detect this during runtime, please?
Please leave a short reply, if you won't do it, so I will do this.
 [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
Done, I can add such a constant to the 5.3 branch and trunk sometime this weekend
 [2010-11-11 02:43 UTC] kalle@php.net
Automatic comment from SVN on behalf of kalle
Revision: http://svn.php.net/viewvc/?view=revision&amp;revision=305266
Log: Added new constant; ZEND_MULTIBYTE to check whether PHP was compiled using --enable-zend-multibyte or not instead of sniffing phpinfo() (FR #52348)
 [2010-11-11 02:44 UTC] Kalle@php.net
-Status: Re-Opened +Status: Closed
 [2010-11-11 02:44 UTC] Kalle@php.net
Added, this will be available in PHP 5.3.4+ ;-)
 [2010-11-11 18:19 UTC] php-bugs at thequod dot de
Thanks a lot!
 [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())»
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Nov 23 07:01:29 2024 UTC