【问题标题】:Accents in php and mysql pdophp 和 mysql pdo 中的口音
【发布时间】:2014-05-02 08:01:08
【问题描述】:

我需要从 DB 中读取一些我以这种方式有口音的值:“Cafetería”,真正的单词是“Cafetería”

当我将json传递给php脚本时,是这样的:

{"attribution":"Cafetería"} 

$json = file_get_contents('php://input');
$json_post = json_decode($json, true);
$attribution = $json_post['attribution'];

但它读错了,并没有从 DB 中给我任何行。我使用 PDO 从 DB 中读取数据。

$db = new PDO("mysql:host=$hostDB;dbname=$nameDB;charset=UTF-8", $userDB, $passwordDB, array(PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

    $stmt = $db->prepare("SELECT id, title, lat, lon FROM POI_Table WHERE attribution=:attribution");
    $stmt->execute(array(':attribution'=>$attribution));

如果我在 HEIDI 中执行相同的查询,但将值完全按照 json 文件给出的方式写入,它就可以工作。在查询中使用前我应该如何转换值?

【问题讨论】:

    标签: php json pdo


    【解决方案1】:

    您为 mysql 设置了错误的编码方式。

    utf8 没有破折号

    另一个答案本质上是错误的,因为它会导致双重额外重新编码并且仅适用于 lat1 字符。

    【讨论】:

    • 我会试试的,等一下
    • 我会试着看看它为什么会失败。等我搞清楚了再发帖。
    【解决方案2】:

    如何在您的代码中执行此操作?

    $json_post = json_decode(utf8_decode($json), true);
    

    【讨论】:

    • 完美。我有口音的问题。每天我必须和他们一起工作对我来说就像是一次拍摄。谢谢你。
    • 如果这解决了您的问题,请不要忘记将您的问题作为已回答;)
    • 它说我必须等待几分钟才能完成。完成了;)
    • Biribu 我认为@Your Common Sense 实际上是正确的,你应该尝试修改你的mysql数据库的编码;)
    猜你喜欢
    • 2017-12-26
    • 2014-08-11
    • 2015-09-01
    • 2015-09-02
    • 1970-01-01
    • 2016-01-14
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多