【问题标题】:Website conversion help - UTF-8, Covering all the bases... functions, metas, and sql utf-8网站转换帮助-UTF-8,涵盖所有基础...函数、元数据和sql utf-8
【发布时间】:2011-07-31 17:58:57
【问题描述】:

你们在回答我之前认为的一个问题时做得非常出色 - 我会在我深入转换但发现我做错了什么之前问这个问题。我为自己制作的网站只有 3 页。它有表格,sqli 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

HTML

<!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"/>

SQL

(来自 cpanel 界面)MySQL 连接整理”:utf8_general_ci

SQL DB(仍处于 pre utf-8 模式)

用户名 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) 是否通过元标记设置每个页面足以使整个页面 UTF-8

3) 使用元标记是否意味着我的所有表单字段都已作为 UTF-8 数据输入?如果没有,我该如何改变它们。

4) 我的数据库应该使用哪一个? utf8_general_ci 或 utf8_unicode_ci

5) 我需要区分大小写。我只看到 ci 为 utf8。这是因为“Dave”与“dave”不同,所以使用多字节比较会自动比较大小写...??!?!?!

6) 我的数据库目前有 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 字符。

等待你的智慧......

【问题讨论】:

  • 我没有得到你的第一个问题。本地化是什么意思。语言环境?
  • 是的。语言环境。我修正了拼写! :) 如果网站都是 UTF-8,我想对于那些函数我还必须指定语言环境,并且有一个名为 setlocale 的函数或其他东西 - 我也需要使用它吗?

标签: php xhtml utf-8 multibyte-functions


【解决方案1】:

我将从一些答案开始:

2) 您的服务器还应该发送标头,表明发送的内容是 UTF-8 格式:

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

3) 浏览器会以 UTF-8 格式发送数据,是的。但是黑客可能不会,所以你也应该在你的htmlententies和类似的HTML编码函数中给出UTF-8-Charset(见example exploit

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

6) 实际上恰恰相反:在 ASCII 中你可能需要比 UTF-8 更大的 VARCHAR(“Dave”是 4 个字符,4 个字节;“ǝʌɐp”是 4 个字符,8 个字节。)

【讨论】:

  • 酷,谢谢你的建议! 2)不知道您也可以发送带有内容类型的标题。 3) 谢谢,我会记住在我所有的函数调用中设置 utf-8。 5)很高兴知道! 6)你是如何倒过来输入的?哈哈。我也许可以使用您的方法来测试我的网站。大声笑。
  • 几周前我看到一个stackoverflow用户的用户名翻转了,所以我搜索了......发现:revfad.com/flip.html
  • 该翻页上的源代码真的很酷。看起来他们使用 /u0279 作为 alt 字符。他们似乎也使用 Arial Unicode 字体。以前从没想过字体……我会看看是否有 Verdana Unicode 字体……希望如此,这是我的最爱。大声笑。
  • 这几乎回答了我的大部分问题,除了数据库问题。感谢您的所有提示!
【解决方案2】:

1) 关于Set locale information,它可以影响一些字符串函数(即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>

**Escaped Characters

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

$input=$_POST["input"];

【讨论】:

  • 好的,我会尝试所有这些东西。我很好奇的是如何在键盘上输入外国代码?获取那个 ASCII 符号是否类似于 ALT 243?如果我想输入奇怪的符号,我该怎么做?将 Windows 本身更改为 UTF-8?然后输入 /#73634 什么的?!我不知道如何通过按住 ALT 并输入 0 到 255 之间的数字来显示除英语和一些 ascii 字符之外的任何内容。Unicode 应该不同,或者可能相同。大声笑我迷路了!大声笑
  • 如果您从中文键盘键入,如果您“创建”一个中文字符,问题是如何存储这些字节,然后使用正确的编码正确解释它们。关于 ALT+ 这里有一篇好文章:en.wikipedia.org/wiki/Alt_code
  • 我一直在测试网站的变化,一切似乎都很好。我的更改打开的唯一一件事是不使用语句的 SQL 注入攻击,因为我现在无法过滤除 a-z A-Z 和 0-9 之外的所有内容。我想如果你永远无法输入符号,你就永远无法破解它,但现在这扇巨大的门打开了,我感觉不像以前那么安全了。我怎么知道没有 200 种显示报价的方式。呃,好吧。一旦我切换到语句,它应该和以前一样安全。谢谢大家的时间。我很感激!我尝试投票给其他人,但我不能...
猜你喜欢
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多