php传递一个utf-8编码的字符串在soapCall

时间:2016-06-29 17:19:23

标签: php utf-8 soap-client utf8mb4 smart-quotes

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

  

$ source =“test” - @ - ' - “½℗ↄ⃝''是'单身'   echo mb_detect_encoding($ source,“auto”)是UTF-8

     

hex = E2 80 9C 74 65 73   74 E2 80 9D 2D 40 E2 80 93 20 27 E2 80 94 20 22 20 C2 BD 20 20 E2 84   97 20 20 E2 86 84 E2 83 9D 20 20 69 74 E2 80 B2 73 20 E2 80 98 73 69   6E 67 6C 65 E2 80 99

     

错误:processSalesOrder由于SOAP-ERROR而中断:编码:   string'\ x9c ...'不是有效的utf-8字符串

返回: TEST -@ ' “½ IT S SINGLE

添加'encoding'=> soapClient init选项和soapCall选项的“UTF-8”。

mariadb数据库,表,列是utf8mb4,collat​​ion utf8mb4_unicode_ci

php.ini default_charset =“UTF-8”

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

在网页上正确显示。 编码检测在发送到soapCall之前显示UTF-8,但被soapCall拒绝。

我错过了什么?

编辑: 我也使用PHP DOMDocument::save() saves as ASCII instead of UTF-8的建议,但没有帮助。

  

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

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

  

iconv.input_encoding = UTF-8

     

iconv.internal_encoding = UTF-8

     

iconv.output_encoding = UTF-8

     

mbstring.internal_encoding = UTF-8

     

mbstring.http_input = UTF-8

1 个答案:

答案 0 :(得分:0)

尝试使用utf8 / utf8mb4时,如果您看到带有问号的黑钻石, 其中一种情况存在:

案例1(原始字节 utf8):

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

案例2(原始字节 utf8):

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

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

时才会出现黑钻石