0

将正确编码的 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

4

1 回答 1

0

尝试使用 utf8/utf8mb4 时,如果您看到带有问号的Black Diamonds ,则存在以下情况之一:

案例 1(原始字节不是utf8):

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

案例 2(原始字节utf8):

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

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

于 2016-07-05T02:33:15.140 回答