2014-10-07 40 views
0

你能解释我什么我做错了,C/Z我与我所看到的PHP error_log中的不同结果,并在不同的上下文呼应

比方说,我们有XML包含了像一个节点完全糊涂了这

<Name>&#1043;&#1040;&#1041;&#1048;&#1044;&#1059;&#1051;&#1051;&#1048;&#1053; &#1040; &#1047;</Name> 

,如果我做

$lastname = $xpath->query(//Name/text()")->item(0)->textContent; 

$sql = "call save_ticket_ordered($order_id, $ticket_num, '$lastname', '$time', '$user', @retcode);"; 

error_log("Calling stored procedure: " . $sql); 

我在error.log中看到

[周一10月6调用存储过程:call save_ticket_ordered(103696202,78290448213275,'\ xd0 \ x93 \ xd0 \ x90 \ xd0 \ x91 \ xd0 \ x98 \ xd0 \ x94 \ xd0 \ xa3 \ xd0 \ x9b \ xd0 \ x9b \ xd0 \ x98 \ xd0 \ x9d \ xd0 \ x90 \ xd0 \ x97','03 .10.2014 09:53','xxxxxxx',@retcode );

但是,如果我跑

$xmldoc = new DOMDocument(); 
$xmldoc->load("response.xml"); 

$xpath = new DOMXPath($xmldoc); 
$lastname = $xpath->query("//Name/text()")->item(0)->textContent; 
echo $lastname; 

我能看到我的终端正常西里尔结果,

ГАБИДУЛЛИНАЗ

所以,你有什么建议,以实现我的目标把一个合适的西里尔字符串放入数据库?

回答

0

假设你的数据库表和PHP文件是UTF-8编码,数据库连接后,发送这些查询:

  • SET NAMES utf8
  • SET CHARSET utf8

举例来说,如果你”重新使用PDO,你会这样做:

$this->pdo = new \PDO($dsn, $user, $pass, 
          array(
           \PDO::ATTR_ERRMODE   => \PDO::ERRMODE_EXCEPTION, 
           \PDO::ATTR_EMULATE_PREPARES => false, 
          )); 
$this->pdo->exec('SET NAMES utf8'); 
$this->pdo->exec('SET CHARSET utf8'); 

如果您的database tables aren't UTF-8, change it accordingly

+0

谢谢佩德罗!这有助于;) – 2014-10-09 13:55:55