所有人都欢呼知识的守护者,这个愚蠢的问题可能会让你身体健康,
我已经着手学习PHP,作为这项光荣事业的一部分,我正在尝试为MySql DB创建一个RESTful API。我在PHP 5.3上使用Slim。到现在为止还挺好。但我也住在丹麦,这是一个问题(显然),因为我们喜欢使用像'æ','ø'和'å'这样的字符。
所以,当我向一个没有奇怪字符的对象询问我梦幻般的RESTful装置时,它礼貌地回复:
{
id: "3",
name: "Wall - Plaster",
price: "200",
unit: "m2",
tags: "1"
}
但是,唉。当要求返回带有'æ'或任何其他奇怪字符的对象时,事情就不那么顺利了:
FOOL! json_encode(): Invalid UTF-8 sequence in argument
utf8_encode()和Iconv.conv()适用于字符串和数组。但是我可以将什么用于物体?有没有什么方法可以迭代我的方式通过一个对象,比如foreach?
我的数据库和表都是UTF8。
我的排外功能:
function getItem($id) {
$sql = "SELECT * FROM items WHERE id=:id";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("id", $id);
$stmt->execute();
$item = $stmt->fetchObject();
$db = null;
echo json_encode($item);
//echo $item;
//print_r($item);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
谢谢你,也许处女们带着发酵大麦的礼物涌向你。
答案 0 :(得分:2)
您的数据库连接可能是ISO-8859-1 - 它是mySQL连接的默认编码。因此,即使数据库是UTF-8,您也会获得ISO-8859-1字符数据。
有关更改PDO连接字符集的各种(永久和每个连接)方法,请参阅this question。