我想知道怎样才能将俄语/印地语/中文...加入到utf8中。我知道函数utf8_decode / utf8_encode,但它们只适用于ISO-8859-1。
在php中是否有更通用的功能,它可以与任何类型的字符执行相同的任务?如果我想编码/解码俄语字符,我应该使用哪一个?
我也试过这个:mb_convert_encoding($ string,'UTF-8','CP1251');
但它不起作用,它会转换:РкРеаа
编辑:
我正在使用的脚本是一个非常简单的表单,用户必须填写这些表单才能将一些信息存储到数据库中:
<?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
当我执行脚本时,一切正常,它与数据库连接,显示的消息是:
一切都可以插入用户(名称)VALUES('Екатеринка')
然后我去了数据库,存储的信息是:ЕкаÑ,Ðμринка... 但是,如果我复制并粘贴数据库的SQL提示“Everything OK INSERT INTO USERS(name)VALUES('Екатеринка')”并按回车键,则存储的信息为Екатеринка。
在阅读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>";
结果是:“我们从数据库中获取:Екатеринка”
因此,尽管信息存储在表格中,但至少可以很好地检索到它
答案 0 :(得分: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编码文本,请发送内容类型标题:
header("Content-Type: text/html; charset=UTF-8");