在PHP中转义单引号和Unicode符号

时间:2019-06-05 14:28:51

标签: php utf-8

我正在使用php开发新闻应用程序,管理员将在其中输入新闻项及其描述,并最终显示给用户。我正在使用 mysql数据库

一切似乎都正常,但是我无法转义单引号,也无法在输出文本中显示某些货币符号。我正在使用UTF-8 charset。我使用过str_replace函数,但无济于事。我也尝试过htmlentities($mystring, ENT_QUOTES | ENT_IGNORE, ‘UTF-8),但实际上忽略(删除)了单引号和符号,而不是转义和显示它们。我还在mysql的表列中使用UTF-8_general_ci

这是我用于检索数据的代码:

try{
    $pdo = new PDO("mysql:host=$hostname;dbname=$dbname",
    $username,$password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,   false);
    $stmt = $pdo->prepare("SELECT * FROM feed WHERE news_id = ?");
    $stmt->bindParam(1,$myval);
    $stmt->execute();
    while($myrow = $stmt->fetch()){
        $newarray[] = $myrow;
    }
    $mystring = $newarray[0]['body'];
    $mystring = str_replace("'","/'",$mystring);
    echo $mystring;
} catch(PDOException $e){
    echo 'Failed to retriev database item ' . $e->getMessage();
}

以下是示例输出:

  

国际货币基金组织(IMF)的扩展信贷工具(ECF)计划,以较低票息率筹集了30亿美元的欧洲债券,以及加纳的惠誉(Fitch)正面评级应足以证明,经济有望影响加纳塞地的实力。 ``在过去的几周中,例如加纳银行向银行业的参与者释放了一大笔钱,以满足我们的要求。那是史无前例的,我们认为如果停止炒作,加纳塞地将稳定我们想要的方式。'',

1 个答案:

答案 0 :(得分:1)

尝试为PDO连接指定utf8

$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $username,$password);

如果仍然遇到问题,请尝试在连接后立即运行此查询

$pdo->exec("set names utf8");

这些步骤应该可以解决您的问题,但前提是必须将数据正确保存在数据库中,并且您已为数据库,表和字段指定了正确的字符集排序规则。