最近在LINUX 下工作 本来安装了一个 scrot
但是 使用起来感觉不是很顺手
于是 查找了一下 FIREFOX 的截图 插件
第一个 安装的是
Pearl Crescent Page Saver
这个 插件 但是 这个 插件的免费版不支持 区域截图
所以放弃了
最后安装了
Screengrab
这个插件 可以截图 部分截图 并且 可以 保存到本地或复制
安装的 方法 就是 在firefox 的
工具-》附加组件-》获取附加组件
然后查找组件名称 最后添加到FIREFOX
万恶的乱码,折腾了我三四天终于搞定了
变态的需求 这样的
背景
1 虽然好像所有的字符都可以转换成UTF-8 ,但是的确不是这样的,我的理解是,好像都可以用UTF-8 表示 ,但是 不是都可以转(未经验证)
需求
有一个变态的日文邮件客户端 叫什么忘了,发邮件 时候默认的是ISO-2022-JP 的编码,然后可以在里面写入非ISO-2022-JP的字符,好在发送的时候 会提示 内容里有特殊字符,是否替换成其它字符,但是操作者 竟然 要选择 继续 按当前情况来 发送 就是 这样地 然后 GMAIL竟然可以正常 解析这变太的邮件
我们的邮件服务程序只是正常的转码 即用PHP 的ICONV 来转码,带来的结果是 有一些不能转,如果用INGORE选项来解释 则是乱码
纠结啊,和像女人一样难办, 这样不行,那样也不行
这几十个日文字符真的是很愁人
我对文字编码方面也不是很了解
经过 EMEDITOR 一系列操作 得知 日文编码 是以下规律的
1b2442日文 1b2842 english 1b2442 日文1b2842
为了得到这个规则也经历了很多弯路 , 一度以为 这两组字符就是文件的开始与结束 ,后来才明白不 这么回事,是文字的开始 与结束
找到不能解析的日文 后,发现好在不是很多,四五十个吧,直接暴力就可以了,直接把这些替换成可以正常替换的日文字符就可以了
替换的时候要注意 由于要通过十六进制查找 ,会出现 1b2442449283881b2842928388 这种 所以要替换的时候 不能直接替换9283 为其它字符 ,后面的非日文也会被替换 会导致乱码
所以 需要 把是日文的挑拣出来 只替换这里面的 非日文不处理.
具体算法需要的同学自己解决吧
这个问题能解决,要感谢MAKER的强力支持,一次又一次地找每个字的十六进制代码
最近遇到一个问题
使用PHP mail()发送邮件的时候
使用部分邮件管理系统会出现乱码
但是在邮箱里看 编码是正确的
$to = 'sai-szn@163.com";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\r\n";
$headers .= "To: $to \r\n";
$headers .= 'From: sai-szn@163.com' . "\r\n";
$subject = "邮件标题";
$subject = "=?UTF-8?B?".base64_encode($subject)."?=";
$body = "邮件内容";
mail($to, $subject, $body, $headers);
注意代码
$headers .= 'Content-Transfer-Encoding: 8bit'. "\r\n";
如果不添加的话有可能出现 使用邮件系统 读取邮件乱码
作日文程序的时候 有很多情况下要把假名转换成罗马字
在网上有这么一个网站 romaji.org
该网站可以把日文的假名转换成罗马字
但是在作程序的时候需要在程序内部调用
所以定义了下面一个方法
function to_romaji($str)
{
$url = "http://romaji.org/";
$post_data['text'] = mb_convert_encoding($str,'Shift_JIS', 'UTF-8');
$post_data['save'] = "convert to Romaji";
$url_info = parse_url($url);
foreach ($post_data as $key => $value)
$values[] = $key . "=" . urlencode($value);
$data_string = implode("&", $values);
$request = "POST / HTTP/1.1\n";
$request .= "Host: " . $url_info['host'] . "\n";
$request .= "Referer: " . $url. "\n";
$request .= "Content-type: application/x-www-form-urlencoded\n";
$request .= "Content-length: " . strlen($data_string) . "\n";
$request .= "Connection: close \n";
$request .= "\n";
$request .= $data_string . "\n";
$fp = @fsockopen($url_info['host'], 80);
@fputs($fp, $request);
if($fp !== false)
while(!feof($fp))
$result .= fgets($fp, 128);
else
return false;
fclose($fp);
if (preg_match("/([^<]*)<\/font>/s", str_replace("
", "\n", $result), $match))
return $match[1];
else
return false;
}
使用方法
$str = 'ユーザ';
$str_roamji = to_roamji($str);
echo $str_romaji;
输出的结果是
yu^za
写了一个判断输入字符是否含有全角字符的方法,现方法如下
function isHaveSbc($str) //判断字符串中是否含有全角字符,如果有返回全角字符个数,没有返回0
{
$count = 0;
for ($i = 0; $i < strlen($str); $i++) {
if (isSbc(substr($str, $i, 1))) {
$count++;
}
}
return $count;
}
function isSbc($char) //判断是否是全角
{
if (ord($char) > 0xa0) //如果字符的ascii码大于128就因该是全角字符
{
return true;
} else {
return false;
}
}
今天 在安装 浏览器的 flash 的时候 出现错误
使用archlinux 的命令
pacman -S flashplugin-prerelease
执行 之后 还是无法 读取FLASH
尝试了很多办法 都不好用 最后 在GOOGL 上用英文 找里下
解决办法 如下
pacman -S flashplugin-prerelease
这个命令是必须的
创建 目录
mkdir ~/.mozilla/plugins/
cp /user/lib/mozilla/plugins/libflashplayer.so ~/.mozilla/plugins/
重启浏览器
FLASH可以正常工作了
公司情况特殊 ,GIT提交 比较频 ,而且还要 上传到 外网测试
更新较快的话 文件 比较难挑
发布文件前还要 检查语法错误,去掉BOM,更改文件权限 写说明,各种操作
知道规范性的东西都可以用代码来完成 ,一直懒不爱学BASH 被逼无耐,来吧 BASH 抱抱
BASH初学的话 注意 BASH 和PYTHON 差不多语法要求严格 ,多空格少空格 都不行 ,长了短了都不行, 像女人一样
提几个要点就可以了
1. 接收参数 用GETOPT
2.去掉BOM 直接用SED替换
3.打包tar 可以切换目录 -C
大约思路是 把要处理的文件 以明码的形式写到文件 里然后解析文件 检查文件语法错误 ,去BOM 再设置权限 最后打包
以下是代码
#!/usr/bin/env bash
# 功用列表
# 打包,邮件,根据git的结果进行打包
# 需要接收的参数如下 email out in
#临时文件夹
NOWTIME=”`date +%Y%m%d%H%M%S`”
TEMPWORKSPACE=”/tmp/jpptmp/”
PATHDIRNAME=$NOWTIME
TEMPDIR=$TEMPWORKSPACE$PATHDIRNAME
SENDMAIL=0
INFILE=”a.txt”
MAILADD=”
READMEFILE=”
BKFOLDER=/
PREFIX=”
AFTFIX=”
VIEWFILE=1
REMOVEFILE=0
function showhelp
{
echo ‘将会把输入文件里的文件 打包并发送到 指定目录 ‘
echo “例子 jpp -i 输入文件 \n”;
echo ‘-m 邮件地址 \n’
echo ‘-i 输入文件 \n’
echo ‘-v 显示出输 \n’
echo ‘-a 说明文件 \n’
echo ‘-p 前缀 \n’
echo ‘-q 后缀 \n’
}
#处理参数
if [ "$#" = 0 ]
then
helpmsg=$(showhelp)
echo -e $helpmsg
exit 1
fi
while getopts “m:i:va:p:q:$*” opt
do
case $opt in
m ) MAILADD=$OPTARG;;
i ) INFILE=$OPTARG;;
v ) VIEWFILE=0;;
a ) READMEFILE=$OPTARG;;
p ) PREFIX=$OPTARG”_”;;
q ) AFTFIX=”_”$OPTARG;;
? ) helpmsg=$(showhelp)
echo -e $helpmsg
exit 1;;
esac
done
if [ ! -f $INFILE ]
then
echo “$INFILE 文件不存在,请使用 -i 指定输入文件 或 重新输入”
exit 2
fi
#清空临时文件夹
echo “正在清空临时文件夹 $TEMPDIR”
if [ -d $TEMPDIR ]
then rm -r $TEMPDIR
mkdir $TEMPDIR -p
else
mkdir $TEMPDIR -p
fi
echo “正在清空临时文件夹 DONE”
#初始化 README{
if [ ! -z $READMEFILE ]
then
echo ‘把 ‘ $READMEFILE ‘的内容发送到 README中’
more $READMEFILE >> $TEMPDIR/README
# echo -e “\n——————————” >> $TEMPDIR/README
fi
#}
for i in `more $INFILE`
do
#如果文件存在
if [ -f "$i" ]
then
if [ $VIEWFILE ]
then
echo $i
fi
#如果是php 进行语法检查 如果出错 强行中止
if [ "php" == ${i##*\.} ]
then
parseInfo=`php -l $i 2>/dev/null`
if [ $? == 255 ]
then
echo ‘找到了语法错误 ->’ $i
echo $parseInfo;
echo ‘请修复后再提交’
#退出程序
exit 1
fi
fi
cp –parent $i $TEMPDIR
else
if [ $VIEWFILE ]
then
# echo -e “\n” $i “not exists”
echo -e “\033[20;31m "$i" \033[0m" "not exists"
fi
if [ $REMOVEFILE = 0 ]
then
REMOVEFILE=1
echo -e “\n\n” “以下のファイルがあるかどうか、確認してください。あるなら、削除してください\n” >> $TEMPDIR/README
fi
echo -e $i >> $TEMPDIR/README
fi
done
#设置文件权限
find $TEMPDIR -type f -exec chmod 0644 {} \;
find $TEMPDIR -type d -exec chmod 0755 {} \;
#如果是文本文件,则去掉bom{
#取得文件类型的最后一位
echo ‘正在替换BOM’
for i in `find $TEMPDIR -type f`
do
filetype=`file $i |egrep -o \s*[A-za-z]+$`
if [ $filetype=='text' ]
then
sed -i ’s/^\xef\xbb\xbf//g’ $i
fi
done
echo ‘完成’
patchname=$PREFIX$NOWTIME$AFTFIX.tar.gz
echo “正在打包”
tar zcfp $patchname -C $TEMPWORKSPACE $PATHDIRNAME
echo “正在复制到备份目录 ”
cp $patchname /backup/patchtojp/
echo “完成”
echo “正在删除临时文件夹”
rm -rf $TEMPDIR
echo “下面这行地址可以下载”
echo ‘http://f.200.com/’$patchname
#如果设置了邮件地址
if [ ! -z $MAILADD ]
then
echo ‘正在发送邮件到 ‘$MAILADD
uuencode /backup/patchtojp/$patchname $patchname |mail -v -s $patchname $MAILADD
fi
echo “done” [$patchname]
exit 0
Options -Indexes #阻止文件列表
ErrorDocument 404 /notfound.html #404错误跳转页
ErrorDocument 500 /errorpages/500.html #500错误跳转页 以项目目录为根
deny from 000.000.000.000 #封禁一个IP地址
#如你输入210.10.56.,则将封禁210.10.56.0~210.10.56.255的所有IP地址。
allow from 000.000.000.000 #被允许的IP地址则为000.000.000.000
#如你输入210.10.56.,则将允许210.10.56.0~210.10.56.255的所有IP地址。
deny from all #阻止所有人访问该目录,则可以使用
#不过这并不影响脚本程序使用这个目录下的文档。
DirectoryIndex index.php index.php3 messagebrd.pl index.html index.htm
#这些互为替换的索引文件可以排成一个列表,服务器会从左至右进行寻找,
#检查哪个文档在真实的目录中存在。
#如果一个也找不到,它将会把目录列表显示出来(除非你已经关闭了显示目录文件列表)。
最近写了一个判断输入字符是否含有半角字符,现方法如下:
function isHaveDbc($str) //判断字符串中是否含有半角字符,如果有返回半角字符个数,没有返回0
{
$count = 0;
for ($i = 0; $i < strlen($str); $i++) {
if (isDbc(substr($str, $i, 1))) {
$count++;
}
}
return $count;
}
function isDbc($char)
{
if (isSbc($char)) {
return false;
} else {
return true;
}
}
ps命令的参数介绍:
-a 显示终端上的所有进程
-u 显示执行这个进程的用户
-x 显示当前不在这个终端下的进程
-e 显示终端上的所有进程
-f 查看完整的命令
-l 长格显示
-h 不显示标题
注:ps的参数一般结合使用,常用的有 -aux,-ef等等。