PHP脚本中POST方法中的塞尔维亚拉丁字符


Serbian latin charcters in POST method in PHP script

我在mysql数据库中插入安卓应用程序中的塞尔维亚拉丁字符时遇到问题。它显示的不是č, ć, š,而是?, ? , ?

我可以手动在数据库中插入这些字符,但从应用程序中我不能。

任何帮助都将不胜感激!

这是我的PHP给定

<?php
$con=mysqli_connect("xx.xx.xx.xx","xxxx","xxxx","xxxx");
mysqli_set_charset($con,"utf8");
// array for JSON response
$response = array();
// check for required fields
if (isset($_POST['NAD']) && isset($_POST['KOM'])&& isset($_POST['VR']) &&     isset($_POST['IDV'])){
$NAD = $_POST['NAD'];
$KOM = $_POST['KOM'];
$IDV = $_POST['IDV'];
$VR = $_POST['VR'];

$result = mysqli_query($con,"INSERT INTO komentari(id, ime, komentar,vrijeme) VALUES('$IDV', '$NAD', '$KOM','$VR')");
// check if row inserted or not
if ($result) {        // successfully inserted into database
    $response["success"] = 1;
    $response["message"] = "";
    // echoing JSON response
    echo json_encode($response);
} else {
    // failed to insert row
    $response["success"] = 0;
    $response["message"] = "Doslo je do greske";
    // echoing JSON response
    echo json_encode($response);
}
} else {
// required field is missing
$response["success"] = 0;
$response["message"] = "Nedostaje polje";
// echoing JSON response
echo json_encode($response);
}
?>  

PHP不应该是问题所在。您可以尝试函数utf8_encode,但通常这是不必要的,而且可能不会起作用。你所需要做的就是确保你网站的每个部分都有相同的字符编码,并且字符编码支持你想要使用的每个字符。

通常最简单的方法是使用UTF-8(MySQL称之为utf8_unicode_ci,我认为),而不使用BOM,因为这偶尔会引起问题(一些软件将此ANSI称为UTF-8)。因此,确保每个HTML/PHP页面,甚至JS和CSS,以及整个数据库结构都是UTF-8。

如果你已经有了一个太重的结构,无法四处走动和转换所有东西,那么你唯一的解决方案就是"老式"。在将任何内容保存到数据库中之前,您需要将所有内容编码为非常编码类型的安全形式,例如使用htmlentities

然后,除非你想在页面中使用&eacute;之类的东西,否则你需要将文本解码为以前的形式,例如使用htmlentities_decode(又名html_entity_decode,我认为两者都有效)。

不过,这是一个创可贴。在开始之前,很少有正当理由不总是确保所有内容都是UTF-8。以后一定要这样做。