Linux中/proc目录下文件详解阅读全文
想要在echo语句中使用$(( ))来计算i+1的值的写法,注意是两个点,不是三个点:


for i in 输出连续IP和PingN次的一行脚本写法:




倒序-1输出:



一)shell for循环打印1到100的数字:
for i in {1..100} ;do time curl http://mp.i*v.XX.com/; done


二)解决shell脚本for i in {0..10}输出{0..10}的问题:


输出的却是{0..10}就这么一个字符串。
解决方案:
你执行这段文件用的不是bash,  是debian自己实现的dash(debian系的/bin/sh默认指向/bin/dash)
你可以直接
/bin/bash  example.sh
或者让sha-bang生效
chmod +x example.sh
./example.sh
参考:https://www.oschina.net/question/1047640_156390
https://www.cnblogs.com/xxiong1031/articles/6884381.html
用/bin/sh是不行的,得用/bin/bash,而 FreeBSD里位置不一样,但也行:
/home/irdcops/shell/forinport.jackxiang.com/forinportredis.sh

#./forinportredis.sh    
mkdir /data/redis/6379
mkdir /data/redis/6380
mkdir /data/redis/6381
mkdir /data/redis/6382
mkdir /data/redis/6383
mkdir /data/redis/6384
mkdir /data/redis/6385
chown -R redis /data/redis/6379
chown -R redis /data/redis/6380
chown -R redis /data/redis/6381
chown -R redis /data/redis/6382
chown -R redis /data/redis/6383
chown -R redis /data/redis/6384
chown -R redis /data/redis/6385
/sbin/chkconfig --add redis
/sbin/chkconfig --add redis6380
/sbin/chkconfig --add redis6381
/sbin/chkconfig --add redis6382
/sbin/chkconfig --add redis6383
/sbin/chkconfig --add redis6384
/sbin/chkconfig --add redis6385
/sbin/chkconfig redis on
/sbin/chkconfig redis6380 on
/sbin/chkconfig redis6381 on
/sbin/chkconfig redis6382 on
/sbin/chkconfig redis6383 on
/sbin/chkconfig redis6384 on
/sbin/chkconfig redis6385 on

source ~/.bashrc
alias cforinport='cd /home/irdcops/shell/forinport.jackxiang.com'

三)用cat和awk输出行号:
最简单的用:nl ,nl命令可以用来给文件添加行号,然后再通过重定向将结果保存到一个新的文件中:
在nl命令中,默认情况下,行号与正文行之间是通过制表符(tab)进行分隔的。
在nl命令中使用-s选项来指定行号与正文行之间的分隔符。例如,如果你想要使用空格作为分隔符,可以这样使用:
通过-s选项,我们将分隔符从默认的制表符更改为了空格:   nl -s' ' input.txt

1package main

2import (
3  "flag"
4  "os

cat用 cat -n xxx.txt,就能输出行号。
AWK打印行号的实现:
cat /etc/resolv.conf|awk '{print NR $0}'
cat /etc/resolv.conf|awk 'BEGIN{i=1}{print i$0;i++}'
awk给shell赋值:
#!/bin/sh
var=$(awk '{print $1}' tmp.txt)
echo $var
注意:var= 后面没有空格;
注意下面: i=$(($i+1)),和awk一样的赋值方式!


i=1
while(( $i<100 ))
do
echo $i
i=$(($i+1))
done


AWK的NR用法,打印0-->999的行号,注意:NR-1了,否则是:1--》1000:
cat anta_Tbl_User.txt |awk '{print $0NR-1" "$0NR-1}'  > anta_Tbl_User_**.sql


for 2:

for i in `seq 100`
do
if((i%3==0))
then
echo $i
continue
fi
done


for 3:
for(( i=1;i<100;i++ ))
do
if((i%3==0))
then
echo $i
continue
fi
done


输出行号:
  1、免费,是世界上最贵的东西。

  免费是个很诱人的东西,最显着的例子就是马云和马化腾。看看开始,QQ和淘宝就知道了:先让你不花钱也能感到比花了钱还爽,不花钱就能开店。当我们恍然大悟的时候--你已经离不开它,你身边的所有人都在用QQ,从七岁到七十岁,无一例外。再看看淘宝:从BB到古稀老人都热充网上购物,最热门的话题就是--相约于淘宝。淘宝现在是值钱的“旺铺”。

  2、要假设你融不到一分钱的情况去做事业。

  什么叫没钱?不是说你吃饭都没钱,如果真是那样,还不如去领取救济金的实在。如果你创业只想融资,那就也要假设一个融不到资的情况,毕竟你身边的的兄弟都以你的马首是瞻,你自己爬不好摔死了是你活该,但是砸死一堆兄弟就是你不对了。融资的途径很多,但能融到资的毕竟不多。不要眼高手低,踏实做事的人才有收获。

  3、花时间去学习别人成功的经验,也花时间去学习别人失败的经验

  看了《赢再中国》这节目收获很多,很多精彩的评论的。我认为,等你什么时候能看别人惨败的经验,看得一身冷汗,你就离成功不远了。如今反映成功的例子和书越来越多,创业者也读到了。非常期待马云的《阿里巴巴的10001个错误》,肯定是惊世之作!

  4、营销最佳的语言是自己的语言,而不是套用别人的话

  能打动用户的,只有你自己最真实的东西。套话谁都在说,特别是名言,大家都套用,你说的不烦人家听的都烦了,营销需要的是一个人,一个聪明的人,而不是一台的复读机。

  5、每个创业者都要有使命感,但必须要有能做到的使命感!

  很多人认为使命感是大企业的事情,甚至可有可无,这是非常错误的思想。很多世界大企业都拥有强烈的使命感,我没要向别人学习,但就不能张口说大话,这样会让人觉得你浮夸,不实际。

  6、最优秀的创业一定是简单的!优秀的公司一定是简单的!

  很多创业者认为成功要走多元化业务,其实最优秀的公司是最简单的。

  这里的简单并不是指平凡,而是代表:专注。最优秀的创业者,世界最优秀的公司一直只做一件事。

  7、如果你的公司目前只有两个人,你就在名片上把自己的称呼放低一点儿,这样会赢得尊重!

  很多刚创业者,明明只有个人,非得告诉说人是CEO,这是COO,这是CFO,身兼数职。可能吗?别人还会相信你?不会,这样的企业是不值得相信的。

  8、成功的企业一定要搞清楚为什么成功

  成功的企业是创业者的学习对象,为什么成功?学习,不是模仿,切忌不是模仿别人的做法,别人的成功是模仿不来的。
写入到: /root/.bash_profile 文件即可,这个是首选:
或者:/root/.bashrc


ipL=`/sbin/ifconfig eth1|grep "inet addr:"|cut -d: -f 2|cut -d" " -f1`
export PS1="\u@$ipL:\w# "
PHP经常被与开源数据库MySQL配合使用来开发Web应用,它们在开源开发工具组合LAMP中是非常重要的一部分。在PHP 5.3中增加了一个名为MySQLInd的新功能,取代了以前的libmysql库,用来连接PHP和MySQL,并拥有优化MySQL性能和内存利用率的可能。
Alshanetsky表示,“当说到数据库时,多数情况下主要的瓶颈并非数据库接口的速度,而是数据库的操作。使用MySQLInd来取代标准的libmysql,肯定会带来速度的改善,不过我不认为它会让所有应用都提高运行速度。换句话说,使用高度调优MySQL应用的人将会看到新版PHP中更快速、更专用的接口所带来的速度提升。”
总体来说,Alshanetsky预计,通过从目前的PHP5.2转向PHP 5.3,用户应该会看到多数工作流程的性能将提高5%到15%,某些特定工作流程甚至可能看到更高的收益。
http://www.phpchina.com/resource/manual/smarty/language.function.insert.html

Insert 函数类似欲 inluce 函数,不同之处是 insert 所包含的内容不会被缓存,每次调用该模板都会重新执行该函数.

Let's say you have a template with a banner slot at the top of the page. The banner can contain any mixture of HTML, images, flash, etc. so we can't just use a static link here, and we don't want this contents cached with the page. In comes the insert tag: the template knows #banner_location_id# and #site_id# values (gathered from a config file), and needs to call a function to get the banner contents.

例如你在页面上端使用一个带有广告条位置的模板,广告条可以包含任何HTML、图象、FLASH等混合信息. 因此这里不能使用一个静态的链接,同时我们也不希望该广告条被缓存. 这就需要在 insert 函数指定:#banner_location_id# 和 #site_id# 值(从配置文件中取),同时需要一个函数取广告条的内容信息.

Example 7-10. function insert
例 7-10. insert 函数演示

{* example of fetching a banner *}
{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}

In this example, we are using the name "getBanner" and passing the parameters #banner_location_id# and #site_id#. Smarty will look for a function named insert_getBanner() in your PHP application, passing the values of #banner_location_id# and #site_id# as the first argument in an associative array. All insert function names in your application must be prepended with "insert_" to remedy possible function name-space conflicts. Your insert_getBanner() function should do something with the passed values and return the results. These results are then displayed in the template in place of the insert tag. In this example, Smarty would call this function: insert_getBanner(array("lid" => "12345","sid" => "67890")); and display the returned results in place of the insert tag.

在此例中,我们使用了 getBanner 作为 name 属性,同时传递了 #banner_location_id# 和 #site_id# 两个参数. 接下来 Smarty 在你的 php 程序中搜索名为 insert_getBanner() 的函数,#banner_location_id# 和 #site_id# 的值被组合成一个数组作为函数的第一个参数传递给该函数. 为了避免函数命名混乱,所有的 insert 函数都必须以 insert_ 开头. 你的 insert_getBanner() 函数根据传递的参数执行并返回执行的结果. 这些结果就显示在模板中调用该函数的位置. 在此例中 Smarty 调用该函数类似insert_getBanner(array("lid"=>"12345","sid"=>67890"));并将返回的结果显示在调用的位置.

If you supply the "assign" attribute, the output of the insert tag will be assigned to this template variable instead of being output to the template. NOTE: assigning the output to a template variable isn't too useful with caching enabled.

如果设置了 assign 属性,该属性对应的变量名用于保存待包含函数的输出,这样待包含函数的输出就不会直接显示了.注意:赋给模板变量的输出信息在缓存的时候同样无效.

If you supply the "script" attribute, this php script will be included (only once) before the insert function is executed. This is the case where the insert function may not exist yet, and a php script must be included first to make it work. The path can be either absolute, or relative to $trusted_dir. When security is enabled, the script must reside in $trusted_dir.

如果指定了 script 属性,在调用函数并执行前将先包含(只包含一次)script指定的 php 脚本. 这是为了防止被调用的函数不存在,先调用包含该函数的 php 脚本将避免该情况.

The Smarty object is passed as the second argument. This way you can reference and modify information in the Smarty object from within the insert function.

Smart 对象作为函数的第二个参数被传递,在待包含函数中可以通过 $this 访问并修改 smarty 对象信息.

    Technical Note: It is possible to have portions of the template not cached. If you have caching turned on, insert tags will not be cached. They will run dynamically every time the page is created, even within cached pages. This works good for things like banners, polls, live weather, search results, user feedback areas, etc.

    技术要点: 使模板的一部分不被缓存. 如果打开了缓存, insert 函数却不会被缓存,每次调用页面它们都会被动态加载,即使是在缓存页面中. 该特性可以广泛应用于广告条、投票、实时天气预报、搜索结果、反馈信息等区域.
[~/shell]# xxd -g 1 concat.sh

-g 1,2:1和2的区别就是:1 2分别是:66  6669  明白了吧,呵呵!
主要用途:可以用来查看PHP在windows下的utf8记事本编码的bom,会导致session,cookie,输出图片出现异常的bom,大名鼎鼎啊,ef bb bf 就是utf-8 bom,如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
如,注意efbb这个就是bom啦:

[~/shell]# hexdump bom.txt -C        

00000000  ef bb bf 64 66 64 66 64  0a                       |...dfdfd.|

---------------------------------------------------------------------------------------------------------------------------------------------

[~/shell]# xxd -g 2 bom.txt        

0000000: efbb bf64 6664 6664 0a                   ...dfdfd.
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------

vi在linux下查看16进制文件的方法。
xxd
Creates a hex dump of the given file; it can also do the
reverse, so it can be used for binary patching
用法很简单:
在vi的命令状态下
:%!xxd               ——将当前文本转换为16进制格式。(实践OK,但在windows下还是wxHexEditor界面打开好用)
:%!xxd -r            ——将当前文件转换回文本格式。
于是乎:
将当前文本转换为16进制格式,Vi命令行模式,输入:
:%!xxd

将当前文件转换回文本格式,Vi命令行模式,输入:
:%!xxd -r

哈哈,就在这一转16进制后又转回来的时候,你就发现bom,露出了原型,0000000: efbb bfef bbbf 6466 6466 640a            ......dfdfd.到转回来后出现<feff>dfdfd,哈哈哈哈,原形毕露了吧!
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||


[~/shell]# xxd -g 1 test.sh  
0000000: 66 69 6c 65 6e 61 6d 65 3d 24 31 0a 73 74 72 69  filename=$1.stri
0000010: 6e 67 31 3d 65 78 69 73 74 0a 73 74 72 69 6e 67  ng1=exist.string
0000020: 32 3d 78 69 0a 63 6f 6d 6d 61 6e 64 3d 22 63 61  2=xi.command="ca
0000030: 74 20 24 66 69 6c 65 6e 61 6d 65 20 7c 20 67 72  t $filename | gr
0000040: 65 70 20 24 73 74 72 69 6e 67 31 20 7c 20 67 72  ep $string1 | gr
0000050: 65 70 20 24 73 74 72 69 6e 67 32 22 0a 65 76 61  ep $string2".eva
0000060: 6c 20 24 63 6f 6d 6d 61 6e 64 0a                 l $command.

---------------------------------------------------------------------------------------------------------------------------------------------
[~/shell]# xxd -g 2 test.sh  

0000000: 6669 6c65 6e61 6d65 3d24 310a 7374 7269  filename=$1.stri
0000010: 6e67 313d 6578 6973 740a 7374 7269 6e67  ng1=exist.string
0000020: 323d 7869 0a63 6f6d 6d61 6e64 3d22 6361  2=xi.command="ca
0000030: 7420 2466 696c 656e 616d 6520 7c20 6772  t $filename | gr
0000040: 6570 2024 7374 7269 6e67 3120 7c20 6772  ep $string1 | gr
0000050: 6570 2024 7374 7269 6e67 3222 0a65 7661  ep $string2".eva
0000060: 6c20 2463 6f6d 6d61 6e64 0a              l $command.

---------------------------------------------------------------------------------------------------------------------------------------------
当然你也可以这样:
[~/shell]# hexdump test.sh -C            

00000000  66 69 6c 65 6e 61 6d 65  3d 24 31 0a 73 74 72 69  |filename=$1.stri|
00000010  6e 67 31 3d 65 78 69 73  74 0a 73 74 72 69 6e 67  |ng1=exist.string|
00000020  32 3d 78 69 0a 63 6f 6d  6d 61 6e 64 3d 22 63 61  |2=xi.command="ca|
00000030  74 20 24 66 69 6c 65 6e  61 6d 65 20 7c 20 67 72  |t $filename | gr|
00000040  65 70 20 24 73 74 72 69  6e 67 31 20 7c 20 67 72  |ep $string1 | gr|
00000050  65 70 20 24 73 74 72 69  6e 67 32 22 0a 65 76 61  |ep $string2".eva|
00000060  6c 20 24 63 6f 6d 6d 61  6e 64 0a                 |l $command.|
0000006b
Iframe刷新页面:

parent.window.location.reload();
div层刷行页面:

window.location.reload();
建立table表:
CREATE TABLE `table` (
  `ID` tinyint(4) NOT NULL,
  `FQQ` varchar(12) NOT NULL,
  `FTime` varchar(21) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8


插入如下数据:
    ID   FQQ   FTime
   1   372647693   2100-11-11
   2   372647693   2100-11-11
   1   372647694   2100-11-12
   2   37264764   2100-11-15

查询如下:

SELECT * , count( DISTINCT FQQ )
FROM `table`
GROUP BY FQQ
LIMIT 0 , 30

查询结果:

ID   FQQ   FTime   count(distinct FQQ)
2   37264764   2100-11-15   1
1   372647693   2100-11-11   1
1   372647694   2100-11-12   1



退化为:

SELECT 641009005 , FQQ, FTime
FROM `table`
GROUP BY FQQ
LIMIT 0 , 30



641009005   FQQ   FTime

641009005   37264764   2100-11-15
641009005   372647693   2100-11-11
641009005   372647694   2100-11-12

shell操作mysql

WEB2.0 jackxiang 2010-10-18 16:28
   在shell开发中,很多时候我们需要操作mysql数据库(比如:查询数据、导出数据等),但是我们又无法进入mysql命令行的环境,就需要在shell环境中模拟mysql的环境,使用mysql相关命令,本文总结几种shell操作mysql的方法,供大家参考。

方案1
  
view plaincopy to clipboardprint?
01.mysql -uuser -ppasswd -e"insert LogTable values(...)"  
mysql -uuser -ppasswd -e"insert LogTable values(...)"
优点:语句简单
缺点:支持的sql相对简单

方案2
准备一个sql脚本,名字为update.sql,例如:
view plaincopy to clipboardprint?
01.CREATE TABLE `user` (  
02.  `id` varchar(36) NOT NULL COMMENT '主键',  
03.  `username` varchar(50) NOT NULL COMMENT '用户名',  
04.  `password` varchar(50) NOT NULL COMMENT '用户密码',  
05.  `createdate` date NOT NULL COMMENT '创建时间',  
06.  `age` int(11) NOT NULL COMMENT '年龄',  
07.  PRIMARY KEY  (`id`)  
08.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';  
09.DROP TABLE IF EXISTS `visit_log`;  
10.CREATE TABLE `visit_log` (  
11.  `id` varchar(36) character set utf8 NOT NULL,  
12.  `type` int(11) NOT NULL,  
13.  `content` text character set utf8 NOT NULL,  
14.  `createdate` date NOT NULL,  
15.  PRIMARY KEY  (`id`)  
16.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='访问日志';  
CREATE TABLE `user` (
  `id` varchar(36) NOT NULL COMMENT '主键',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(50) NOT NULL COMMENT '用户密码',
  `createdate` date NOT NULL COMMENT '创建时间',
  `age` int(11) NOT NULL COMMENT '年龄',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
DROP TABLE IF EXISTS `visit_log`;
CREATE TABLE `visit_log` (
  `id` varchar(36) character set utf8 NOT NULL,
  `type` int(11) NOT NULL,
  `content` text character set utf8 NOT NULL,
  `createdate` date NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='访问日志';
新建一个update_mysql.sh,内容如下:
view plaincopy to clipboardprint?
01.use chbdb;  
02.source update.sql  
use chbdb;
source update.sql

然后执行如下命令:
view plaincopy to clipboardprint?
01.cat update_mysql.sh | mysql --user=root -ppassword  
cat update_mysql.sh | mysql --user=root -ppassword
优点:支持复杂的sql脚本
缺点:
1> 需要两个文件:update.sql和update_mysql.sh
2> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
方案3
    新建一个shell脚本,格式如下:
view plaincopy to clipboardprint?
01.#!/bin/bash  
02.mysql -u* -h* -p* <<EOF  
03.    Your SQL script.  
04.EOF  
#!/bin/bash
mysql -u* -h* -p* <<EOF
    Your SQL script.
EOF
例如:
view plaincopy to clipboardprint?
01.#!/bin/bash  
02.mysql -uroot  -ppassword <<EOF  
03.   use chbdb;  
04.    CREATE TABLE user (  
05.  id varchar(36) NOT NULL COMMENT '主键',  
06.  username varchar(50) NOT NULL COMMENT '用户名',  
07.  password varchar(50) NOT NULL COMMENT '用户密码',  
08.  createdate date NOT NULL COMMENT '创建时间',  
09.  age int(11) NOT NULL COMMENT '年龄',  
10.  PRIMARY KEY  (`id`)  
11.) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';  
#!/bin/bash
mysql -uroot  -ppassword <<EOF
   use chbdb;
    CREATE TABLE user (
  id varchar(36) NOT NULL COMMENT '主键',
  username varchar(50) NOT NULL COMMENT '用户名',
  password varchar(50) NOT NULL COMMENT '用户密码',
  createdate date NOT NULL COMMENT '创建时间',
  age int(11) NOT NULL COMMENT '年龄',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';
优点:
1>支持复杂的sql脚本
2>无需其它额外文件
缺点:
1> 表名、字段不能使用单引号,需要修改原有sql语句
2> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。
方案4
准备一个sql脚本,如update.sql,然后执行如下命令:
view plaincopy to clipboardprint?
01.mysql -uroot -ppassword < update.sql  
mysql -uroot -ppassword < update.sql
优点:支持复杂的sql脚本
缺点:
1> 一旦中间出错,之后脚本就不会执行,例如:
如果第一张表已经存在,则会报出如下异常:
ERROR 1050 (42S01) at line 1 in file: 'update.sql': Table 'user' already exists
然后脚本退出,第二张表也就无法创建。


    大家知道在mysql命令行中使用source命令,即使中间出错,后续脚本也会继续执行,但是如上几种方式,均无法解决该问题,如果大家有好的建议,请回复,谢谢!

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hbcui1984/archive/2010/01/03/5125387.aspx
陈胜滋长了骄傲情绪,听信谗言,诛杀故人,与起义群众的关系日益疏远。派往各地的将领也不听陈胜节制,甚至为争权夺利而互相残杀。如武臣到邯郸,自立为赵王,以陈余为大将军,张耳为丞相。陈胜命他率兵入关支持周文,他却抗命而派韩广略取燕地。韩广在燕地旧贵族的怂恿下,也自立为燕王。周市至魏地,立魏国旧贵族宁陵君咎为魏王。围攻荥阳的起义军将领田臧与吴广意见不合,竟假借陈胜之命杀死吴广,结果导致这支起义军的全军覆灭。而章邯在解除了起义军对荥阳的包围后,倾全力向陈县猛扑。陈胜亲自督军应战,不幸失利。秦二世二年十二月,陈胜退至下城父(今安徽蒙城西北),被判徒庄贾杀害。“张楚”政权至此遂亡。

说白了就是他们起义依靠的是阶级的仇恨以及一股血勇之气,当胜利来得如此快又如此大时,被胜利冲晕头脑的起义军领导阶层便开始无法适应了,这也就是人们常常说的打天下易,守天下难

项羽是楚国的没落贵族,而刘邦则是秦朝的一个小小政府官员,陈胜吴广起义给了他们一个实现自己梦想和霸业的机会,当陈胜吴广起义失败后,项羽和刘邦才逐渐走上历史舞台
被自己的贪欲害死,与其他人无关。
农民 心态,注定只是昙花一现
是被自己手下杀的,跟远在天边,互相不认识的项羽刘邦无关
被自己人害死的





吕雉的家族与吕不韦有联系吗?
◎吕雉的父亲吕公(吕文)是秦朝末年齐国始祖吕尚的后裔。
而吕不韦原是卫国的商人,后来到赵国,再到秦国为相。
两个家族无论其背景与身份,都不相同,没有任何关系。
firefox 浏览器ajax提交中文乱码完美解决

最近在做一个项目,遇到AJAX中文乱码问题,经过一个下午的努力终于完美解决,现将心得写下来,希望对那些还困绕在这个问题而头痛不已的人们有所帮助。
众所周知,使用AJAX传送和接收中文参数时,如果不在客户端和服务器做相应的处理就会出现乱码问题,在网上相应的文章也不少,但是有的情况下很难从中找到符合自己理想的答案,我今天就是在网上找了很多,但是都差不多,讲ASP和JSP的比较多(我是用的PHP),所以到最后都没找到自己满意的答案。
AJAX的中文乱码可以大概分为两中,第一种是向服务器端发送中文参数时(xmlhttp.open(“get|post”,url,true)), 服务器端接收到的为乱码,这个也是我今天遇到的问题,没做处理之前,在IE里是正常的,但是在Firefox里面就出现了乱码,我先把接收到参数输出到一个文本里,没有发现什么问题,郁闷了,然后我就把查询语句在输出来观察(我这里是要从数据库里查出与参数相关的东西),终于发现问题,IE和 Firefox输出的参数不一样,虽然汉字上都一样,但是和前后连接上有细小的区别,于是认定了是编码问题,在网上查找了相关资料,都没能解决问题,但是得到一些启示,因为AJAX发送数据都是采用UTF-8编码的方式发送的,所以要在服务器端进行编码转换(我这里页面是采用GB2312编码的,如果是采用UTF-8的话应该不会有这步的问题),所以我在服务器端进行了UTF-8转GB2312,


$str=iconv(“UTF-8″,”GB2312″,$str);


然后测试,在Firefox上顺利解决了问题,以为大公告成了,可是再到IE下测试,发现IE又出现了问题,服务器端接收到的参数没值,这下就郁闷了,突然看到发送头设置了setRequestHeader(“Content-Type”,”application/x-www-form- urlencoded”);,就找到问题所在了,然后就在发送那里进行了参数编码:
geturl=encodeURI(geturl);
geturl=encodeURI(geturl); //两次也可以写成geturl=encodeURI(encodeURI(geturl));
xmlhttp.open(“GET”,geturl,true);
然后再到服务器端进行URL解码:
$str=urldecode($str); //解码
$ str =iconv(“UTF-8″,”GB2312″,$ str);  //编码转换
注意:解码必须在编码转换前面,不然得不到正确值
保存测试,IE和Firefox都能正常了。
第二种就是服务器端向客户端输出中文时出现乱码,这类问题网上的答案就比较多了,也都能解决,为了避免各位再去查找,我在这里就COPY下J
原因:AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,如果服务器段发送的数据不是UTF-8的格式,那么接收responseText或responseXML的值有可能为乱码。

ajax乱码解决办法一:


在服务器指定发送数据的格式:
在jsp文件中:
response.setContentType(“text/text;charset=UTF-8″);//返回的是txt文本文件
或是
response.setContentType(“text/xml;charset=UTF-8″);//返回的xml文件
PHP:header(”Content-Type:text/html;charset=GB2312”);

ajax乱码解决方法二:

PHP发送中文、Ajax接收
只需在php顶部加入一句:
header(‘Content-type: text/html;charset=GB2312′);
xmlHttp会正确解析其中的中文。
Ajax发送中文、PHP接收
这个比较复杂:
Ajax中先用encodeURIComponent对要提交的中文进行编码
PHP中:
$GB2312string=iconv( ‘UTF-8′, ‘gb2312//IGNORE’ , $RequestAjaxString);
PHP写入MySQL数据库
建立conn时,query一下set names “gb2312″
==================================================
注意红色部分!!!否则无法使用!!!具体原因自己猜!
iconv( “UTF-8″,”GBK” , $gametypes["name"]);

原创:

我的乱码问题是AJAX取数据时产生乱码,本来页面是采用GBK编码的。后来显示为乱码,我使用UE把它转换成UTF-8后,

页面上原来的元素就可以显示正确了。但是,数据库取出来的值还是会乱码。

ob_get_contents ();

取出所有的显示数据,然后输出到日志文件,显示全是乱码。

使用UE把文件再转换成GBK,然后再输出,显示就正确了。

这里再使用:header(‘Content-Type:text/html;charset=GBK’);

前台页面显示就正常。
来源:http://www.chhua.com/web-note313
php中需要查看错误log,如何设置?
    首先需要在php.ini打开开关和制定错误log路径
    log_errors = On
    error_log = d://phperror.log   //windows下的设置

    如果是在linux 下,使用lighttpd服务器,则可以使用如下方式查看log文件
    tail -n 20 /usr/local/lighttpd/log/php-error.log

    在php代码中如何记录log,在PHP官方文档中有个函数error_log(),使用方法如下:

  定义和用法
    error_log() 函数向服务器错误记录、文件或远程目标发送一个错误。
   若成功,返回 true,否则返回 false。
   语法
   error_log(error,type,destination,headers)
______________________________________________________________
ini_set("error_log", "F:/wwwroot/7751/logs/php_error.log");
error_log("index.php exec...", 0);
如果要打印出sql,则相应的query方法里加上error_log($sql,0);即可
error_log是要系统权限的,safe_mode下不能使用。
Firefox浏览器模拟iPad
下载一个 User Agent Switch 的插件。
安装之后,点击 工具 > Default User Agent > Edit User Agent,添加一个 iPad 的 User Agent。
User Agent 上面有了。
App Code Name 输入:iPad。
App Name 输入:Mobile Safari
App Version 输入:5.0 (Macintosh; en-US)

最新内存管理插件:
addons-memory firefox内存优化

发布一个快捷切换hosts的小工具:SwitchHosts!
http://oldj.net/article/switchhosts/
DownLoad:
https://github.com/oldj/SwitchHosts/downloads
http://cloud.github.com/downloads/oldj/SwitchHosts/SwitchHosts_v0.2.2.1785.zip

_______________________________________________________________
问:
那我在内网host,外网host,这块切换环境有没有好的Firefox插件?
答:
switchhost
chrome有插件

firefox上的post get工具:
最佳答案: 扩展 Live HTTP Headers 或者poster

DNS FLusher 2.0.5

Firefox插件 web developer查看cookie及Form表单值很方便,及其它两款不错的插件:
web developer https://addons.mozilla.org/zh-CN/firefox/addon/60/

小D词典
SecureLogin

Memory Fox简介:

这是一个具备释放Firefox内存功能的Firefox扩展,而且经过试用后发现效果相当明显,不仅具备给Firefox释放内存的功能,还具备给当前系统运行的所有程序释放内存的功能,而且使用起来非常简单,启用后一切事情全是自动的了,非常方便。
http://www.softinn.org/memory-fox/

我们采用Firefox的插件Regular Expression Tester(意思是“正则表达式测试工具”):
使用Regular Expression Tester

在Firefox的菜单栏选择“工具——扩展”,下拉菜单中选择Regular Expression Tester,就可以看到Regular Expression Tester的主界面。 我们可以看到,这个工具分为三大块,最上面的Regular Expression文本框用于输入正则表达式,中间的Search Text文本框用于输入待匹配的文本,下面的Result则显示匹配(还包括替换,将来我们会看到)的结果,左下角显示正则表达式操作进行的时间,右下角显示匹配发生的次数。
----------------------------------------------
HTML Regex Data Extractor正则表达式匹配,抓站神马的最合适了。
----------------------------------------------

有firefox缓存查看的插件么?新加插件:cache Viewer Continued 0.8。

第一名:Firebug  firephp firecookie
switchHosts   Change Hosts   DNS Flusher pagediff web developer httpfox
第二名:Easy DragToGo
第三名:Web Develope
Firebug的jQuery开发伴侣 FireQueryr  :blog.sina.com.cn/s/blog_4b93170a0102dt2s.html
LinrLightWeb :这软件帮 助你检查你的网页是否符合标准,结果将帮助你迅速地解决问题。
Html Validator :小巧有用。
Total Validator :安装前,请确认您已安装Firebug插件,1. 开启网页编辑模式,随意编辑网页——Fiddler的好搭档;

firequery
dns flusher
httpfox
firecookie
PageDiff

第四名:SecureLogin
第五名:IE Tab
第六名:MediaWrap
第七名:FlashGot
第八名:支持英语、日语的小D词典
第九名:让FireFox使用IE收藏夹的PlainOldFavorites
第十名:Adblock_Plus

Fast Dial 3.4: Fast Dial 用一套网站的缩略图面板它取代了“about:blank”页面。右键点击缩略图,在上下文菜单依次选择“Fast Dial”、“设置URL”。选取一个 URL 之后点击“OK”。一两秒之后就会出现一个缩略图,以后只需点击缩略图就可以打开网站了。你也可以右键点击页面在上下文菜单中选择“添加到Fast Dial”来指定任何网页。
https://addons.mozilla.org/zh-cn/firefox/addon/fast-dial-5721/
string strip_tags ( string str [, string allowable_tags] ) 返回一个去除了HTML标签的字符串;可以使用第二个参数来设置不需要删除的标签。  这个函数是用来把HTML标签 还有XML标签 包括PHP标签都给省略去的一个函数。

使用方法:

前提:假如现在有这样一个字符串,

PHP代码
$str = "<p>我来自<b><a href='http://www.jackxiang.com'>Jackxiang的博客站</a></b></p>";

1.不保留任何HTML标签,代码会是这样:

PHP代码
echo strip_tags($str);
// 输出:我来自Jackxiang的博客站

2. 只保留<a>一个标签的话,只需要将<a>字符串写到strip_tags的第二个参数中,代码会是这样:

PHP代码
echo strip_tags($str, "<a>");
// 输出:我来自<a href='http://www.jackxiang.com'>Jackxiang的博客站</a>

3. 我们要保留<p>与<b>…多个标签,只需要将多个标签用空格分隔后写到strip_tags的第二个参数中,代码会是这样:

PHP代码
echo strip_tags($str, "<p> <b>");
// 输出:<p>我来自<b>Jackxiang的博客站</b></p>
问:这个标签可以多个不去掉吗?
空格间隔:上面的:
echo strip_tags($str, "<p> <b>");
,空格隔开了<p>这儿是空格<b>; 即可!
分页: 158/339 第一页 上页 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 下页 最后页 [ 显示模式: 摘要 | 列表 ]