2014-10-07 39 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