PHP编码问题

时间:2012-11-11 18:20:59

标签: php xml utf-8 simplexml

在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,但我仍然存在这个角色问题。

2 个答案:

答案 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);