utf 8 - php在soapCall上传递utf-8编码字符串失败


utf 8 - php passing a utf-8 encoded string fails on soapCall

传递一个正确编码的utf-8字符串给php soapCall,它返回它不是一个有效的utf_8字符。

$source = " test " -@ - ' - "½©⃝it ' s ' single '
返回mb_detect_encoding($source, "auto")是utf - 8

hex = E2 80 9C 74 65 7374 e2 80 9d 2d 40 e2 80 93 20 27 e2 80 94 20 22 20 c2 bd 20 20 e2 8497 20 20 e2 86 84 e2 83 9d 20 20 69 74 e2 80 b2 73 20 e2 80 98 73 696E 67 6C 65 E2 80 99

错误:processSalesOrder中断,因为SOAP-ERROR: Encoding:字符串"' x9c…'不是一个有效的utf-8字符串

返回:' TEST ' -@ ' ' "IT’S SINGLE"

添加'encoding' =>'UTF-8'到soapClient初始化选项和soapCall选项。

mariadb数据库,表,列为utf8mb4,排序为utf8mb4_unicode_ci

php.ini default_charset = "UTF-8"

数据库连接设置为utf8mb4HTML页面设置为charset=utf8

在网页上正确显示。encoding detect在发送到soapCall之前显示UTF-8,但是被soapCall拒绝。

我错过了什么?

编辑:我还使用了PHP的建议DOMDocument::save()保存为ASCII而不是UTF-8,但它没有帮助。

$xmlDomDoc->encoding = 'UTF-8';

我终于解决了在php.ini中将[iconv]和[mbstring]的设置更改为UTF-8的问题

iconv。input_encoding = UTF-8

icon .internal_encoding = UTF-8

iconv。output_encoding = UTF-8

mbstring.internal_encoding = UTF-8

mbstring。http_input = UTF-8

当尝试使用utf8/utf8mb4时,如果您看到黑色菱形带有问号,存在以下情况之一:

Case 1(原始字节为而不是 utf8):

  • 要存储的字节没有被编码为utf8。解决这个问题。
  • INSERT SELECT 的连接(或SET NAMES)不是utf8/utf8mb4。解决这个问题。
  • 同时检查数据库中的列是否为CHARACTER SET utf8(或utf8mb4)。

Case 2(原始字节 utf8):

  • SELECT的连接(或SET NAMES)不是utf8/utf8mb4解决这个问题。
  • 同时,检查数据库中的列是否为CHARACTER SET utf8(或utf8mb4)。

只有当浏览器设置为<meta charset=UTF-8>

时才会出现黑菱形