1

在 webhook (XML) 触发器之后,我有一个 PHP 代码进行以下处理:

$xmlData = fopen('php://input' , 'rb'); 
while (!feof($xmlData)) { $xmlString .= fread($xmlData, 4096); }
fclose($xmlData);

file_put_contents('orders/order' . date('m-d-y') . '-' . time() . '.xml', $xmlString, FILE_APPEND);

我还将这些信息传输到数据库:

$xml = new SimpleXMLElement($xmlString);
$address1 = trim($xml->{'billing-address'}->address1);
$sql="INSERT INTO `Customers`(`address1`)
VALUES
('$address1')";

我的问题是 xml 文件和数据库的字符没有正确传输。

原始声明:圣保罗

保存在服务器上的 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
 <address1>S&#xE3;o Paulo</address1>

数据库信息(utf8_general_ci):

圣保罗

一切似乎都正确设置为 UTF-8,但我仍然有这个字符问题。

4

2 回答 2

0

当您建立数据库连接时,运行查询:

SET NAMES 'utf8

那应该有帮助。还要确保来自“网络挂钩”的数据采用该格式。

于 2012-11-11T18:26:08.787 回答
0

我认为您使用的 php 函数并非旨在管理多字节字符串。试着放

mb_internal_encoding("UTF-8");

在您的 php 代码的开头并查看 php.net 上的多字节字符串函数页面以了解您是否需要更改某些函数以支持其相应的多字节版本。

作为最后的机会,您可以尝试在将字符串插入数据库之前对其进行图标化:

$address1 = trim($xml->{'billing-address'}->address1);
$address1 = iconv(iconv_get_encoding($string), "UTF-8", $address1);
于 2012-11-11T18:35:57.613 回答