PHP扩展中的charachter编码

时间:2016-10-28 14:07:05

标签: character-encoding php-extension

我目前正在使用Zend API在C ++中编写PHP扩展。基本上我围绕我的本机C ++接口方法制作PHP_METHOD {..}包装器并使用" zend_parse_parameters(..)"获取相应的输入参数。

此扩展包含可以将字符串作为参数的方法,例如文件名。

我从http://php.net/manual/en/language.types.string.php#language.types.string.details知道字符串在PHP中没有编码,但我仍然希望PHP程序员能够使用像#34; utf8_decode(..)"这样的函数。这样输入字符串可以被扩展名正确读取?

或者PHP程序员是否期望扩展程序从php脚本中检测到编码并相应地处理字符串?

非常感谢每一位帮助!谢谢!

1 个答案:

答案 0 :(得分:0)

你是对的。字符串只是PHP中的二进制blob。作为延伸的作者。你的选择:

  • 让用户交出您的分机UTF-8:到目前为止最好的选择。用户必须做出决定。断言字符串是UTF-8可编码的并且提前失败。
  • 编码自己:你无法知道字符串的含义。由于PHP字符串只是二进制blob并且没有编码信息,因此您不知道预期的字符串内容是什么。它可能只是来自具有奇怪编码的Windows文件,并且与完全不同的编码连接在一起。更糟糕的是,它可能是UTF-8可编码的,但实际上不是UTF-8,在没有用户知道的情况下,你会以错误的方式解释它。因此,解决方案1,让用户通过UTF-8。
  • 替代方法:强制用户传递输入编码。

以下是替代性3的一个例子:

$obj = MyExtensionClass('UTF-8'); // force encoding
$obj->someMethod($inputStr); // try to convert now

标准库使用方法1.请将json_encode视为example