网站转换帮助- UTF-8,涵盖所有的基础.函数、元数据和SQL utf-8


Website conversion help - UTF-8, Covering all the bases... functions, metas, and sql utf-8

你们都非常出色地回答了我之前想的一个问题——我要在我太深入皈依之前问这个问题,结果发现我做错了什么。我只有3页的网站,我正在为自己做。它有表单,sql db。我被告知要使用UTF-8(我部分使用了,但不是全部),哈哈。好,听起来很酷。现在我想将其修复为100%的UTF-8,我已经在PHP, JS和HTML中编写了大约1,900行代码,而不使用多字节函数。所以…我的问题是……在我的转变中,我做了这个…(来自不同地方的代码片段…)

PHP

date_default_timezone_set('America/Toronto'); // sets the timezone to Eastern Stand Time

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

(from cpanel interface) MySQL connection collation": utf8_general_ci

SQL DB(仍在pre - utf-8模式)

username varchar(50) latin1_general_cs

公司名称varchar(50) latin1_swedish_ci

fname varchar(25) latin1_swedish_ci

表中没有有价值的数据。我将把这些更改为以下之一(我不确定是哪一个)…

utf8_general_ci或utf8_unicode_ci

虽然我想让这个网站对外国人可用,但它不是一个高优先级,但是,因为我做的是UTF-8风格,它可能已经可以为外国语言工作了。

1)我设置了我的时区,我没有在php中设置我的区域设置,因为我从来没有这样做过。我需要这么做吗?我该如何为我的多伦多/加拿大位置做到这一点?

2)通过meta标签设置每个页面是否足以使整个页面成为UTF-8

3)通过使用元标签,这是否意味着我所有的表单字段已经被输入为UTF-8数据?如果不是,我如何改变它,使它们是。

4)哪一个我使用我的数据库?Utf8_general_ci或utf8_unicode_ci

5)我需要某些东西区分大小写。我只看到ci为utf8。这是因为"Dave"answers"Dave"不同,所以使用多字节比较会自动比较大小写吗?? ?

6)我的DB目前有50个字符用于存储ASCII内容-我假设通过切换到数据库中的utf-8,对于像我这样的英语人来说,50个存储就可以了-但是如果一些外国人过来并输入一堆奇怪的符号,我需要增加x4的存储空间来容纳所有额外的字节unicode?我不介意使用更多的存储,但我很好奇如何正确地分配这将是。既然它是VARCHAR(50),这真的有什么关系吗?如果名字是"Dave",那就是4个字符。如果是某个外国名字,"Dave"的符号可能是12个字符!哈哈所以,如果我分配100到用户名字段,应该这样做,因为它不太可能所有字符都是4字节。或者,将其设置为英语的x4,并将它们都设置为VARCHARS以节省空间。当他们在表单上输入数据时,我将使用MB_LENGTH函数(我忘记了确切的函数),所以我仍然可以控制输入多少字符。

7)我如何测试我的unicode网站?除了漂亮的英语,我从来没有使用过其他语言:)哈哈。如何切换浏览器?假装我来自其他地方,输入一堆代码,看看我的函数是否工作,一旦我重写它们使用mb_(多字节)函数。或者,没有什么可以切换的……我只是输入ALT 245或者别的什么,然后我就得到了符号?我不知道怎么输入外文测试汉字!让英语正常工作,却让所有外国客户无法输入密码,这太糟糕了,因为我没有对我的网站进行足够的测试:)

8)我知道使用某些函数ctype, mb_来处理unicode比较,字符串等。有什么惊喜等着我吗?那些不能正常工作的东西?

是的…我啰嗦!:)我使用Dreamweaver CS3,但这应该无关紧要。在我的实际文件中没有嵌入UTF-8字符。

等待你所有的智慧…

我将从一些答案开始:

2)你的服务器也应该发送报头,表明发送的内容是UTF-8格式的:

header('Content-Type: text/html; charset=UTF-8');

3)浏览器将以UTF-8发送数据,是的。但是黑客可能不会,所以你也应该在你的htmlententies和类似的html编码函数中给出utf -8字符集(参见示例利用)

5)不区分大小写的排序只意味着在执行where子句时,大小写不起作用。

6)实际上,恰恰相反:在ASCII中,您可能需要比UTF-8更大的VARCHAR("Dave"是4个字符,4个字节;

1)关于Set locale信息,它可以影响某些字符串函数(即strtoupper()),其目的是影响和改变某些"事物"的操作方式。例如,在正则表达式中,它改变了'w 'W (Word字符)的方式。但是,随着越来越多的应用程序改为使用Unicode,预计对这种语言环境支持的需求将逐渐消失。

7) W3C可以帮助你一点。

关于测试角色并假装你是另一个来自中国或其他地方的人:

index . php:

<head>
<meta charset="UTF-8"><!-- This tag encode the text that will be typed within a text area (If the accep-charset="" is not speciefied)
If the character typed isnt part of the encoding the character will be escaped**-->
</head>
<form method="POST" action="encode.php" accept-charset="UTF-8"><!--accept-charset"" is used to set the encoding that will be used to transmit the characters over a form-->
<p><textarea name="input" maxlength="256" rows="5" cols="100"></textarea></p>
<p><button>Submit</button></p>
</form>

* *转义字符

然后在 code.php你可以控制你的输入:

$input=$_POST["input"];