我想知道如何将俄语/印地语/中文...字符编码为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>";
结果是:“我们从数据库中得到:Екатеринка”
因此,尽管信息在表中存储错误,但至少可以很好地检索它