我正在使用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)正面评级应足以证明,经济有望影响加纳塞地的实力。 ``在过去的几周中,例如加纳银行向银行业的参与者释放了一大笔钱,以满足我们的要求。那是史无前例的,我们认为如果停止炒作,加纳塞地将稳定我们想要的方式。'',
答案 0 :(得分:1)
尝试为PDO连接指定utf8
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $username,$password);
如果仍然遇到问题,请尝试在连接后立即运行此查询
$pdo->exec("set names utf8");
这些步骤应该可以解决您的问题,但前提是必须将数据正确保存在数据库中,并且您已为数据库,表和字段指定了正确的字符集排序规则。