PHP:在多字节模式下运行时安全地解析ascii字符串

时间:2014-08-12 12:44:20

标签: php utf-8 multibyte

在我的PHP配置文件中,我有

mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_language('uni');
mb_regex_encoding('UTF-8');
ob_start('mb_output_handler');

确保UTF8支持。我已经读过,如果你已经设置了这些设置,那么也应该使用多字节字符串操作函数。我正在改变一个解析excel文件的库,我需要以N12的形式拆分一个属性值来确定电子表格的大小。我知道这个值不能超出ascii范围的值。我是否需要使用多字节字符串操作函数来解析N12中的12个,或者我可以使用正常的字符串操作函数。我问,因为我想保持解决方案的一般性,并可能将解决方案提交回库。如果我需要根据当前模式是否为utf8使用正确的函数,检查这个的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

UTF-8是ASCII的纯超集。如果您的函数可以处理UTF-8,那么根据定义它们也可以处理ASCII。核心PHP字符串函数主要是期望单字节编码,但这并不意味着它们不能与其他编码一起工作;例如:Multibyte trim in PHP?

所以这取决于你究竟想做什么。无论编码如何,核心PHP字符串函数都可以正常工作。如果他们不这样做,并且你的操作在使用多字节字符串时会中断,那么你可以使用相应的MB函数,根据定义,当将输入视为UTF-8时,它也会处理ASCII。