在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ão Paulo</address1>
有关数据库的信息(utf8_general_ci):
圣保罗
似乎所有东西都设置为UTF-8,但我仍然存在这个角色问题。
答案 0 :(得分:0)
建立数据库连接时,运行查询:
SET NAMES 'utf8
那应该有所帮助。还要确保来自“web hook”的数据采用该格式。
答案 1 :(得分:0)
我认为你正在使用的php函数不是为了管理多字节字符串。试试
mb_internal_encoding("UTF-8");
在你的php代码的开头,看看php.net上的Multibyte String Functions页面,了解你是否需要更改某些功能以支持其相应的多字节版本。
作为最后一次机会,您可以尝试在将字符串插入数据库之前对其进行iconv:
$address1 = trim($xml->{'billing-address'}->address1);
$address1 = iconv(iconv_get_encoding($string), "UTF-8", $address1);