将正确编码的 utf-8 字符串传递给 php soapCall 并返回它不是有效的 utf_8 字符。
$source = “test”-@– '— " ½ ℗ ↄ⃝ 它的'single'<br /> echo mb_detect_encoding( $source, "auto" ) 是 UTF-8
E 十六进制 = 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 2 802B 80 98 73 69 6E 67 6C 65 E2 80 99
错误:由于 SOAP 错误,processSalesOrder 中断:编码:字符串 '\x9c...' 不是有效的 utf-8 字符串
返回:“TEST”-@“'”“½ ���它“SINGLE”</p>
将 'encoding' => 'UTF-8' 添加到 soapClient 初始化选项和 soapCall 选项。
mariadb 数据库、表、列均为utf8mb4,排序规则为utf8mb4_unicode_ci
php.ini default_charset = "UTF-8"
数据库连接设置为utf8mb4 html页面设置为charset=utf8
在网页上正确显示。编码检测在发送到soapCall之前显示UTF-8,但被soapCall拒绝。
我错过了什么?
编辑:我还使用了PHP DOMDocument::save() 的建议保存为 ASCII 而不是 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