0

我想知道如何将俄语/印地语/中文...字符编码为utf8。我知道函数 utf8_decode/utf8_encode,但它们只适用于 ISO-8859-1。

php 中是否有一个更通用的函数可以对任何类型的字符执行相同的任务?如果我想编码/解码俄语字符,我应该使用哪一个?

我也试过这个: mb_convert_encoding($string, 'UTF-8', 'CP1251');

但它不起作用,它会转换:Екатеринка in ЕкаС,еринка</p>

编辑:

我正在使用的脚本是一个非常简单的表单,用户必须填写才能将一些信息存储到数据库中:

<?php header('Content-Type: text/html; charset=utf-8'); //To specify to the browser the kind of content


$con = mysql_connect('**host**', '**user**', '**pass**');
mysql_select_db('encoding_test', $con);
mysql_set_charset('utf8', $con);

if($_POST['submitted']){

    //<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> this should go up


    $name2= $_POST['name'];
    echo $name2."<br>";


    /* The name I'm inserting in the form is the following one
    $name="Екатеринка";
    */

    require_once('mysqli_connect.php');

    $q="INSERT INTO USERS (name,pass) VALUES ('$name2' ,'pass')";


    $r = @mysqli_query($dbc, $q); //Here we run the query

    if($r)
    {

        echo 'Everything OK '.$q.'<br>';

    }else{

        echo 'Something wrong<br>';
        echo '<p>'.mysqli_error($dbc).'<br /><br />Query:'.$q.'</p>';

    }



}//Lo del submmited que hay que elminar al final de las pruebas

?>

<html xml:lang=en ""lang="en">
    <head>

        <title>Register From</title>
        <h1>Register From</h1>

    </head>
    <body>
        <form action="Main_menu.php" accept-charset="utf-8" method="post">

            <p>First Name: <input type="text" name="name" size="15" maxlength="20"  /></p>
            <p>Password: <input type="password" name="pass" size="15" maxlength="20"  /></p>

            <p><input type="submit" name="submit" value="Register" /></p>
            <input type="hidden" name="submitted" value="TRUE" />

        </form>
    </body>
</html>

在数据库中创建表的代码是:

require_once('../mysqli_connect.php');

//We create now the USERS table
$q="CREATE TABLE USERS(user_id
MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT
NULL, email VARCHAR(80) NOT NULL, pass VARCHAR(30) NOT
NULL, PRIMARY KEY (user_id)) ENGINE=MyISAM DEFAULT CHARSET=utf8";

$r = @mysqli_query($dbc, $q); //Here we run the query

当我执行脚本时,一切正常,它与数据库连接,显示的消息是:

一切正常插入用户(名称)值('Екатеринка')

但是然后我转到数据库,存储的信息是:ЕкаÑ,еринк¡°... 但是如果我在数据库的 SQL 提示符中复制和粘贴“一切正常插入用户(名称)值('Екатеринка')" 并回车,存储的信息为Екатеринка。

在阅读 dezece 的帖子之前: kunststube.net/frontback。我认为问题不在我的脚本中,因为西里尔字符显示正确,不在数据库中,因为如果我使用它自己的 SQL 提示符,它们被正确存储,所以问题必须出在浏览器和数据库之间的连接上.

我是否应该尝试其他东西:

$con = mysql_connect('**host**', '**user**', '**pass**');
    mysql_select_db('encoding_test', $con);
    mysql_set_charset('utf8', $con);

**在我的脚本中,我使用的是真实信息

编辑2:

好吧,我又添加了几行,只是为了检查如何从数据库中检索信息:

$q="SELECT name FROM USERS WHERE pass='pass'"; 

$r=@mysqli_query($dbc, $q);

$row=mysqli_fetch_array($r, MYSQLI_ASSOC);

echo "We get from the Database: ".$row['name']."<br>";

结果是:“我们从数据库中得到:Екатеринка”

因此,尽管信息在表中存储错误,但至少可以很好地检索它

4

1 回答 1

3

iconv 和 mb_convert_encoding 函数将字符串从一种编码转换为另一种编码。例如,要将文本从 ISO-8859-2 转换为 UTF-8,您可以使用:

$text = iconv("ISO-8859-2", "UTF-8", $text);
$str = mb_convert_encoding($str, "UTF-8", "ISO-8859-2");

要使用它们,您必须知道原始编码。

要在浏览器中查看 UTF-8 编码的文本,请发送 content-type 标头:

header("Content-Type: text/html; charset=UTF-8");
于 2013-08-11T09:25:52.090 回答