【问题标题】:PHP different result of error_log and echo in different contextsPHP在不同上下文中error_log和echo的不同结果
【发布时间】:2014-10-07 04:58:06
【问题描述】:

你能解释一下我做错了什么吗,c/z 我对我所看到的完全感到困惑

假设我们有一个包含类似节点的 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 中看到

[Mon Oct 06 23:34:21.018149 2014] [:error] [pid 13255] [client 127.0.0.1:44050] 调用存储过程:调用 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;

我可以在终端中看到正常的西里尔字母结果,

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

那么你会推荐什么来实现我将正确的西里尔字符串放入数据库的目标?

【问题讨论】:

    标签: php string utf-8


    【解决方案1】:

    假设您的数据库表和 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.

    【讨论】:

    • 谢谢你,佩德罗!这有帮助;)
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多