在utf-8编码的情况下,首字母可能是中文或者英文,英文排在前头,中文排在后面,中文需要按照拼音顺序排序,请问如何实现?
如果是GBK编码的,可以直接对字段进行order by ,但是纯utf-8环境下不行。于是在网上找到了如下两种方法,我试的是第二种,还不错。

Ruby代码


conv = Iconv.new("GBK", "utf-8")  




mysql:

Sql代码

SELECT * FROM table ORDER BY CONVERT( NAME  USING gbk ) ;
Tags: ,
因为我的记忆力严重不足,所以这几天写了一个UTF-8的备忘录,结果发现在UTF-8的编码下,mysql不能正确地排序,于是换到php里面用sort,继续失败……汗死……后来一想,可能是因为UTF-8的编码不是按照拼音来编码的,所以才会导致这个原因,另外貌似GBK的字库也不是完全按拼音排序的,"窦"字在GBK里面存在,但是却排在最后面,为了避免错乱,故在排序时把"窦"替换成同音字"豆",即可,于是写了这个排序函数……哎,弄了我一个晚上,结果就8行代码……无语了……

PHP代码

function name_cmp($a, $b) {    
$a = str_replace('窦', '豆', $a);    
$b = str_replace('窦', '豆', $b);    
$a = iconv('UTF-8', 'GBK', $a);    
$b = iconv('UTF-8', 'GBK', $b);    
$a = ereg_replace('^(a|an|the) ', '', strtolower($a));    
$b = ereg_replace('^(a|an|the) ', '', strtolower($b));    
return strcasecmp($a, $b);    
}    
  
usort($array, 'name_cmp');    

关于网上的mysql按拼音查询的两种说法:
1. 用ORDER BY BINARY(字段) ASC的方式查询数据库
    实际上在纯UTF-8的环境下是实现不了了,只有用UTF-8的编码去保存GBK的字符之后才能这样使用,而且不能忘记替换像"窦"这种特殊的字哦……

2. 在数据库中新建一个字段,保存汉字拼音,再利用该字段查询
    这个方法在数据库里面看起来比较直观,不过同样需要把汉字转换成拼音,直接获得拼音的首字母还是不够的.......
    在网上找了份代码,运行的还不错,不过需要下载一个字库文件:
  

RAR压缩包:
下载该附件:http://www.bigasp.com.cn/Uploads/Files/Code/gbk拼音字库.rar

    预览地址:http://www.bigasp.com.cn/extra/gbk2py
    代码如下:

PHP代码

class my_Getpy {    
var $_dat = 'py.dat';    
var $_fd  = false;    
  
function my_Getpy($pdat = '') {    
  if ('' != $pdat)    
  $this->_dat = $pdat;    
}    
  
function load($pdat = '') {    
  if ('' == $pdat)    
  $pdat = $this->_dat;    
  $this->unload();    
  $this->_fd = @fopen($pdat, 'rb');    
  if (!$this->_fd) {    
   trigger_error("unable to load PinYin data file `$pdat`", E_USER_WARNING);    
   return false;    
  }    
  return true;    
}    
  
function unload() {    
  if ($this->_fd) {    
   @fclose($this->_fd);    
   $this->_fd = false;    
  }    
}    
  
function get($zh) {    
  if (strlen($zh) != 2) {    
   trigger_error("`$zh` is not a valid GBK hanzi", E_USER_WARNING);    
   return false;    
  }    
  if (!$this->_fd && !$this->load()) return false;    
  $high = ord($zh[0]) - 0x81;    
  $low  = ord($zh[1]) - 0x40;    
  // 计算偏移位置    
  $nz = ($ord0 - 0x81);    
  $off = ($high<<8) + $low - ($high * 0x40);    
  // 判断 off 值    
  if ($off < 0) {    
   trigger_error("`$zh` is not a valid GBK hanzi-2", E_USER_WARNING);    
   return false;    
  }    
  fseek($this->_fd, $off * 8, SEEK_SET);    
  $ret = fread($this->_fd, 8);    
  $ret = unpack('a8py', $ret);    
  return $ret['py'];    
}    
  
function _my_Getpy() {    
  $this->_unload();    
}    
}
// demo 测试例子  
?>    
  
<title>GBK码汉字转拼音</title>    
<h1>GBK码汉字转拼音</h1>    
  
<form method=get>    
输入汉字试试:<input type="text" size="16" name="zh">    
<input type="submit">    
</form>    
  
<?php    
if ($str = $_GET['zh']) {    
$py = new my_Getpy;        
$len = strlen($str);    
$ret = '';    
for ($i = 0; $i < $len; $i++) {    
  if (ord($str[$i]) > 0x80) {    
   $xx = $py->get(substr($str, $i, 2));    
   $ret .= ($xx ?  $xx . ' ' : substr($str, $i, 2));        
   $i++;    
  } else {    
   $ret .= $str[$i];    
  }    
}    
$py->unload();    
echo "字串 `<font color=red>{$str}</font>` 的拼音是: <font color=red>{$ret}</font>\n";    
}    
?>    
Tags: ,
js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent

1、  传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。                            

例如:



<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a>');</script>



2、  进行url跳转时可以整体使用encodeURI

例如: Location.href=encodeURI(http://cang.baidu.com/do/s?word=中国asp之家&ct=21);
3、  js使用数据时可以使用escape

例如:搜藏中history纪录。

4、  escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。

最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)

(中国asp之家注:就是说如果你的页面编码是gb2312的话,服务器端接收的将是乱码)

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

附上这个三个函数的介绍:

escape 方法

对 String 对象编码以便它们能在所有计算机上可读,

escape(charString)
必选项 charstring 参数是要编码的任意 String 对象或文字。

说明
escape 方法返回一个包含了 charstring 内容的字符串值( Unicode 格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 "%20" 。

字符值大于 255 的以 %uxxxx 格式存储。

注意   escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和encodeURIComponent 方法。

encodeURI 方法

将文本字符串编码为一个有效的统一资源标识符 (URI)。

encodeURI(URIString)
必选的 URIString 参数代表一个已编码的 URI。

说明
encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。请使用 encodeURIComponent 方法对这些字符进行编码。

encodeURIComponent 方法

将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。

encodeURIComponent(encodedURIString)
必选的 encodedURIString 参数代表一个已编码的 URI 组件。

说明

encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent,那么将返回初始的字符串。因为 encodeURIComponent 方法对所有的字符编码,请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。如果字符串中包含不止一个 URI 组件,请使用 encodeURI 方法进行

Tags: , ,
escape() 方法:
采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。unescape方法与此相反。不会被此方法编码的字符: @ * / +
英文解释:MSDN JScript Reference: The escape method returns a string value (in Unicode format) that contains the contents of [the argument]. All spaces, punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding, where xx is equivalent to the hexadecimal number representing the character. For example, a space is returned as "%20."
Edge Core Javascript Guide: The escape and unescape functions let you encode and decode strings. The escape function returns the hexadecimal encoding of an argument in the ISO Latin character set. The unescape function returns the ASCII string for the specified hexadecimal encoding value.

encodeURI() 方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '
英文解释:MSDN JScript Reference: The encodeURI method returns an encoded URI. If you pass the result to decodeURI, the original string is returned. The encodeURI method does not encode the following characters: ":", "/", ";", and "?". Use encodeURIComponent to encode these characters. Edge Core Javascript Guide: Encodes a Uniform Resource Identifier (URI) by replacing each instance of certain characters by one, two, or three escape sequences representing the UTF-8 encoding of the character

encodeURIComponent() 方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( )
英文解释:MSDN JScript Reference: The encodeURIComponent method returns an encoded URI. If you pass the result to decodeURIComponent, the original string is returned. Because the encodeURIComponent method encodes all characters, be careful if the string represents a path such as /folder1/folder2/default.html. The slash characters will be encoded and will not be valid if sent as a request to a web server. Use the encodeURI method if the string contains more than a single URI component. Mozilla Developer Core Javascript Guide: Encodes a Uniform Resource Identifier (URI) component by replacing each instance of certain characters by one, two, or three escape sequences representing the UTF-8 encoding of the character.

因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。

另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的,escape则在javascript1.0版本就有。

英文注释:The escape() method does not encode the + character which is interpreted as a space on the server side as well as generated by forms with spaces in their fields. Due to this shortcoming, you should avoid use of escape() whenever possible. The best alternative is usually encodeURIComponent().Use of the encodeURI() method is a bit more specialized than escape() in that it encodes for URIs [REF] as opposed to the querystring, which is part of a URL. Use this method when you need to encode a string to be used for any resource that uses URIs and needs certain characters to remain un-encoded. Note that this method does not encode the ' character, as it is a valid character within URIs.Lastly, the encodeURIComponent() method should be used in most cases when encoding a single component of a URI. This method will encode certain chars that would normally be recognized as special chars for URIs so that many components may be included. Note that this method does not encode the ' character, as it is a valid character within URIs.


Tags: , ,

js替换应用 不指定

jed , 2008-9-17 11:29 , 代码编程 , 评论(0) , 阅读(2934) , Via 本站原创


<script language="javascript">
var str="</SheetItems><ElectricalStatus>";
str=str.replace(/\</g,"!");
alert(str);
</script>

Tags:
显然:UL+LI在布局上比table灵活得多。

比较分两列或者多列显示:

table:你需要在服务器上写一大堆代码判断是不是需要换行,或者切分是不是准确

DIV:你只需要定义好css,剩下的做事情叫交给浏览器吧。

最简单的代码:



<style type="text/css">  
    .mycode{ width:300px; height:74px; float:left;}    
    .mycode ul{ width:280px;}    
    .mycode li{ width:100px; float:left; display:block;}    
</style>  
<div class="mycode">  
    <ul>  
        <li>博客小子</li>  
        <li>博客小子</li>  
        <li>博客小子</li>  
        <li>博客小子</li>  
        <li>博客小子</li>  
        <li>博客小子</li>  
    </ul>  
</div>  




不用多说,这个是最精简的代码,请根据你需要修改!
Tags:
公司需要做一个本周排行榜,想想得通过当前日期,得到本周开始日期和结束日期。自己写了个类,就不公布上来了,一个笨办法,后来经高人指点,原来可以如此简单的获得,汗!!!与大家分享:



$date1   =   date("Y-m-d",strtotime("Sunday"));   //周开始  
$date2   =   date("Y-m-d",strtotime("Saturday"));   //周结束
$date1   =   date("Y-m-d",strtotime("last   Sunday"));   //上周开始  
$date2   =   date("Y-m-d",strtotime("last   Saturday"));   //上周结束


Tags:

搞定CSS SPAN和DIV的区别 不指定

jed , 2008-9-3 15:31 , 代码编程 , 评论(1) , 阅读(3093) , Via 本站原创
  SPAN 和 DIV 的区别在于,DIV(division)是一个块级元素,可以包含段落、标题、表格,乃至诸如章节、摘要和备注等。而SPAN 是行内元素,SPAN 的前后是不会换行的,它没有结构的意义,纯粹是应用样式,当其他行内元素都不合适时,可以使用SPAN。

  下面以一个实例来说明这两个属性的区别。

  代码:

  SPAN标记有一个重要而实用的特性,即它什么事也不会做,它的唯一目的就是围绕你的HTML代码中的其它元素,这样你就可以为它们指定样式了。在此例中,标识符允许你将一个段落分成不同的部分。

  还有一个标识符具有类似的功能,

DIV也被用来在HTML文件中建立逻辑部分。但与
SPAN不同,
工作于文本块一级,它在它所包含的HTML元素的前面及后面都引入了行分隔。

  效果:

  SPAN标记有一个重要而实用的特性,即它什么事也不会做,它的唯一目的就是围绕你的HTML代码中的其它元素,这样你就可以为它们指定样式了。在此例中,标识符允许你将一个段落分成不同的部分。

  还有一个标识符具有类似的功能,

  DIV也被用来在HTML文件中建立逻辑部分。但与

  SPAN不同,

  工作于文本块一级,它在它所包含的HTML元素的前面及后面都引入了行分隔。

Tags:

ajax实现google搜索提示效果 不指定

jed , 2008-9-2 17:31 , 代码编程 , 评论(0) , 阅读(2481) , Via 本站原创
http://www.xqbar.com/read.php/6.htm
http://bbs.phpchina.com/thread-50406-1-1.html
关键字 B/S信息实时提示 Ajax
在笔者的一个B/S项目中,涉及到一个订单信息实时提示问题,客户对此实时提示的要求是:
当用户在远程下了一个订单的时候,那么在操作员的浏览器窗口上应该出现一个提示,告诉操作员有新订单,及时处理。
初次想到的就是:利用meta 定时刷新页面,但是在项目实际中,这是根本无法用的,原因如下:
一、页面每刷新一次,都得重新读取一次数据库,无形之中加大了数据库的负担;
二、刷新的时间间隔不能太长,否则,就达不到实时提示的要求;
三、每次刷新不一定能遇到有新订单产生的情况,也就是说:这些频繁的刷新,大多情况下,是没有新订单的;
四、当刷新时,必然会影响到操作员正在进行的工作--肯定是没法用的;
五、综合以上4点,于是决定用隐藏的框架,但是用隐藏的框架,前面三条的问题还是存在;
所以,定时刷新,是行不通的,后来,就借助Ajax,很好地完成了这个要求。但是先别急是怎么实现的,分析一下它内在的逻辑:
A事件:当远程用户下订单的时候———>数据库产生一条新的订单记录
B事件:当操作员处理订单的时候———>数据库新订单记录编辑
关键是A,如果我们在发生A事件的时候,能标记出它,那么,我们的客户端的Ajax再读取这个标记,不就可以实现了吗?事实上,实现原理就是这样的。
原理流程:
当远程用户下新订单的时候,数据库必然产生新的记录,这时用你的服务器端程序(ASP,PHP,JSP,CGI,ASP.NET均可)去建立一个文件(如htm格式,假设名字为new.htm),里面的内容自己随心写入就行;
然后,我们客户端的Ajax每隔一定时间(如20秒,或10秒)去读取上面建立的新文件new.htm ,如果发现这个文件的内容不为空,则表明有新订单生产,于弹出一个对话框,提示操作员“有新订单”之类的消息,于是,操作员便可以对这些订单处理。
当操作员处理完这些订单的时候,这里,就是没有新订单了,那么服务器端程序这里将上面的文件new.htm 内容清空。OK ,这时,如果没有新订单,客户端将永远不会有提示。
当然,利用Ajax有什么优点是不言而喻的,它在极大程度上减少了数据库的开销,只是在数据库发生改变的时候建立一个很小的文件,无论新订单如何多,操作员界面的信息提示永远不必直接读取数据库;
另外一方面,也极大地提高了系统的UI检验效果!何乐而不为?
说到这里,有人就要问了:如果有很多操作员,并且这些操作员处理不同部门的订单,如何做?--哈哈,更简单了,为每个部门的新订单建立新的标记文件就行了
类似的,像论坛的信息提示,订单实时提示,都可以用这个方法解决,不过这里的实时是有间隔的,反正这里不是导弹A-STA控制系统,有20秒的间隔延迟,也是完全可以的!
除非你要用Ajax开发导弹A-STA控制系统实时监控系统,那我是没办法的!
老考虑到代码,我就不在此发了,发出来,也只会让你看得头昏。所以,我提供一个演示地址:
这是模板一个会员管理系统,当有新会员注册时,管理员页面应该有提示
http://itzhiling.com/au/new.php    申请会员--模拟新用户注册
http://itzhiling.com/au/opt.htm     管理员操作页面--演示Ajax的提示效果
要注意到,这整个过程,页面是没有刷新的;使用方法,打开两个浏览器窗口,一个的地址栏输入http://itzhiling.com/au/new.php ,另外一个的地址栏输入http://itzhiling.com/au/opt.htm
,然后,在new.php 窗口中注册一个新用户,再注意opt.htm窗口中的提示信息!
当它提示有新用户注册时,点击OK,打开申核页面,申核后,点击上面的“关闭申核页面”,将不会有提示(除非又有人注册)。
文件包里的文件说明一下:
Ajax.js     自己封装的Ajax库
Class_access.php  ,  global.config.php , gobal.func.php  ,  global.inc.php 一些类库,函数库,可以不用看
New.php   新用户注册页面
Opt.htm    管理员页面
au.php      管理员申核页面
t.mdb    数据库文件,保存用户注册信息

下载文件 (已下载 461 次)

分页: 7/22 第一页 上页 2 3 4 5 6 7 8 9 10 11 下页 最后页 [ 显示模式: 摘要 | 列表 ]