Bill_huohuo 发表于 2005-1-11 06:22:14

请教mysql储存中文问题

小弟无法在mysql4.1中储存中文,上网找了很久,很多前辈建议修改php和mysql的默认字符集。

但小弟租用的是国外服务器,恐怕无法修改默认字符集。哪位大哥大姐知道解决办法,小弟遥谢了。

涩兔子 发表于 2005-1-11 09:41:17

更改了默认字符就失去了支持多国语言的意义 :idea:

最好的解决方案是使用Unicode(兔兔尚在研究中,sirtoozee cms将使用UTF)

其次可以用charset,具体方法:
在网页模板中加入如下meta标签,其中charset后面的变量需要在PHP脚本中声明
<meta http-equiv="Content-Type" content="text/html; charset=<{$CHARSET}>" />
如果是简体中文就用gb2312
如果是繁体中文就是big5

Bill_huohuo 发表于 2005-1-11 19:18:08

多谢兔老大回复。
兔老大所说的使用
<meta http-equiv="Content-Type" content="text/html; charset=<{$CHARSET}>" />
的方法小弟试过了,但是浏览器无法自动显示中文,必须手动从view--->character encoding中选择简体中文。
所以小弟在代码开始处添加了一句
header("content-Type: text/html; charset=<{$CHARSET}>");
浏览器可以自动显示中文了,但mysql还是无法储存中文信息。
兔老大所说的Unicode,哪里有相关的信息可以查询呢?谢谢

jiangtao9999 发表于 2005-1-11 21:28:11

你储存时的编码要和实用时候的编码一样。

apache 的编码设置会覆盖 html 的设置,建议使用 header() 输出头信息。

Bill_huohuo 发表于 2005-1-11 21:55:15

储存时的编码与使用时的编码都是gb2312,可是中文存不进mysql

涩兔子 发表于 2005-1-12 08:05:23

你的签名很美 :oops:

如果你在编程:
你可以说说是在update、insert一组值到一个table么?

如果你是在应用某个PHP程序:
你可以说说使用的是哪个PHP程序么?

兔兔好对症下药 :mrgreen:

Bill_huohuo 发表于 2005-1-12 19:10:41

你的签名很美 :oops:

如果你在编程:
你可以说说是在update、insert一组值到一个table么?

如果你是在应用某个PHP程序:
你可以说说使用的是哪个PHP程序么?

兔兔好对症下药 :mrgreen:
那个签名是林秀晶,近来看了她的<对不起,我爱你>, 被这个小姑娘电得晕晕的,所以拿她作签名意淫一下 :lol:

小弟在用php和mysql写一个留言板,但是当用户用中文发言时,留言的内容不会被insert到table里,而是代之以空白,或者乱码。

遥谢兔老大,您给看看有没有什么办法。

涩兔子 发表于 2005-1-13 10:10:09

兔兔使用的是PEAR的DB类实现的对MySQL的操作,DB可以实现对大量数据库的兼容

这是兔兔在写注册时用到的

$table_fields = array('username','user_password','email','name','gender','native_place','education_level','political_level','education_background','seeking_career','contact_way','reg_date');
                                $table_values = array($username,$password,$email,$name,$gender,$native_place,$education_level,$political_level,$education_background,$seeking_career,$contact_way,$reg_date);
                                $table_name   = 'user';
                                $sth = $db->autoPrepare($table_name, $table_fields, DB_AUTOQUERY_INSERT);
                                $db->execute($sth, $table_values);

建议你先去http://pear.php.net看看DB的使用

jiangtao9999 发表于 2005-1-13 21:07:05

:roll:

涩兔子 发表于 2005-1-14 08:08:58

出现乱码不要怕

drupal使用unicode,默认的语言是英语,插入MySQL的数据即使是论码也能正常显示成简体中文

应该在数据库操作和字符编码上多下些功夫 :idea:

ise 发表于 2005-1-17 21:08:41

小弟这里也遇到这样的问题还有:
在论坛提交如下的内容到mysql,但是再重其中读出来,尽显示出执行下面的代码后的结果,不知道该怎么办?正常的文字输入没问题,就是有了特殊的符号就象下面的就不行了。

<form action = "page.php" method = "post">
<input type= "text" name="like">
<input type="submit" value="send">
</form>

//我读数据的代码:
$post_text = nl2br(stripslashes($posts_info['post_text']));
//显示内容的代码:
<td width=65% valign=top>$post_text<br><br>
新手学习中希望大家能帮帮忙!!谢谢了先。

legendren 发表于 2005-1-18 08:13:20

nl2br --Inserts HTML line breaks before all newlines in a string

stripslashes -- Returns a string with backslashes stripped off. (\' becomes ' and so on.) Double backslashes (\\) are made into a single backslash (\).

$posts_info['post_text'] is a array, isn't it?

这样吧,你应该参考phpBB2对特殊符号的处理方法:

2.0.11版本的phpBB2已经把处理特殊符号写成自定义的function——phpbb_clean_username

function phpbb_clean_username($username)
{
        $username = htmlspecialchars(rtrim(trim($username), "\\"));
        $username = substr(str_replace("\\'", "'", $username), 0, 25);
        $username = str_replace("'", "\\'", $username);

        return $username;
}

ise 发表于 2005-1-18 13:58:07

$posts_info['post_text'] is a array, isn't it?
是的!
我试着将其加入了但是处理后的结果是显示了
<form action = "p
就没有了是不是要在输出是做一些改变
谢谢楼上的兄弟了!

涩兔子 发表于 2005-1-18 14:22:22

not at all :mrgreen:

ise 发表于 2005-1-18 14:29:30

听说如下解决乱码方法不止到公社的老大该如何具体的做:mysql-3.X的?
php向数据库写入时先用iconv转码,从数据库读出的内容用php显示时,设置charset为utf-8
页: [1] 2
查看完整版本: 请教mysql储存中文问题