php偏移量16个0

openssl_encrypt($xml,’AES-128-CBC’,$key, false, hex2bin(‘00000000000000000000000000000000’));

//java代码是服务提供方写的,目前知道这样写的对方能解出来,不懂java就不写代码了.

golang

package main

import (
“bytes”
“crypto/aes”
“crypto/cipher”
“encoding/base64”
“fmt”
“io”
“log”
“os”
)

var iv = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
//必须这样写,如果写成[]byte(“16个0”)会丢失前面16个字节

func main() {
TestCBCAES()
}

func TestCBCAES() {
key := []byte(“IHqnFXMNhpzYNLOU”)
data := “xmlssssss”
result, err := AesEncrypt([]byte(data), key)
if err != nil {
panic(err)
}
origData, err := AesDecrypt(result, key)
if err != nil {
panic(err)
}
fmt.Println(string(origData))
}

func AesEncrypt(origData, key []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
blockSize := block.BlockSize()
origData = PKCS5Padding(origData, blockSize)
blockMode := cipher.NewCBCEncrypter(block, iv)
crypted := make([]byte, len(origData))
blockMode.CryptBlocks(crypted, origData)
return crypted, nil
}

func AesDecrypt(crypted, key []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
//blockSize := block.BlockSize()
blockMode := cipher.NewCBCDecrypter(block, iv)
origData := make([]byte, len(crypted))
// origData := crypted
blockMode.CryptBlocks(origData, crypted)
origData = PKCS5UnPadding(origData)
return origData, nil
}

func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
padding := blockSize – len(ciphertext)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext…)
}

func PKCS5UnPadding(origData []byte) []byte {
length := len(origData)
// remove the last byte
unpadding := int(origData[length-1])
return origData[:(length – unpadding)]

}

golang代码参考,修改了偏移量的方式,可能跟服务端实现的方式有关系

如何讓 AES 在 Golang 與 Android(Java) 得到一致的加解密結果

从wordpress项目弄了一个.po文件直接生成.mo文件 如果是英文是正常的,为了减少一套语言包 打算直接用中文做msgid 结果发现怎么都不行

各种搜索

> http://stackoverflow.com/questions/31804791/gettext-not-translating-every-string
> https://www.gnu.org/software/gettext/manual/html_node/msgfmt-Invocation.html

按说是可以解决的,继续各种折腾

> 找到一个中文的文章 http://blog.csdn.net/williamwanglei/article/details/8568926
> 这个参数是关键 –from-code=utf-8

### 步骤

> xgettext –keyword=e –from-code=utf-8 app/controllers/IndexController.php –output=fool.pot 扫描源代码生成pot文件
> msginit –locale=zh_CN –output=zh_CN.po –input fool.pot 得到.po文件
> msgfmt zh_CN.po –no-hash –o=zh_CN.mo 得到.mo文件

“`
echo $this->e(‘中文’);//得到结果 chinese
“`
完整的po文件
“`
# Chinese translations for PACKAGE package
# PACKAGE 软件包的简体中文翻译.
# Copyright (C) 2016 THE PACKAGE’S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Logiz , 2016.
#
msgid “”
msgstr “”
“Project-Id-Version: \n”
“Report-Msgid-Bugs-To: \n”
“POT-Creation-Date: 2016-03-25 17:55+0800\n”
“PO-Revision-Date: 2016-03-25 17:59+0800\n”
“Last-Translator: Logiz \n”
“Language-Team: Chinese (simplified)\n”
“Language: zh_CN\n”
“MIME-Version: 1.0\n”
“Content-Type: text/plain; charset=UTF-8\n”
“Content-Transfer-Encoding: 8bit\n”
“X-Generator: Poedit 1.8.6\n”

#: app/controllers/IndexController.php:36
msgid “Hello”
msgstr “test”

#: app/controllers/IndexController.php:37
msgid “中文”
msgstr “chinese”
“`

### phlacon 新版有个BUG

setlocale(LC_ALL, ‘zh_CN’);

要自己设置下才行

初步确认是phalcon框架在升级到2.0后没有向下兼容 出现的BUG

现象:

在ini里面配置了数组

[dn]

status.1 = “start”

status.2=”stop”

通过phalcon 2.0.4 的ini方法解析后得到一个数组var_dump的结果是

array(2) {
[“1”]=>
string(1) “start”
[“2”]=>
string(1) “stop”
}

自己写的数组和phalcon 1.3版本是这样的

array(2) {
[1]=>
string(5) “start”
[2]=>
string(4) “stop”
}

 

在用PHP输出图片的时候果断想到了用304来进行缓存,记录下折腾的过程


$catchTime = 3600*24;//无脑缓存
$modifiedTime = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
if( strtotime($modifiedTime) + $catchTime > time() ){
header("HTTP/1.1 304");
header('Cache-Control: max-age=' . $catchTime);//不加这行会出现一会200 一会304的情况
exit;
}
header("content-type:image/png");
header("Last-Modified:".gmdate("D, d M Y H:i:s", time()+864000)." GMT");
header("Expires: " .gmdate('D, d M Y H:i:s', time()+864000).'GMT');
header('Cache-Control: max-age=' . $catchTime);
//必须要有这行才行,测试环境 CHROME 不然后面的请求浏览器不会发送HTTP_IF_MODIFIED_SINCE

不过还需要优化,目前是无脑缓存的,还需要接合文件的最后修改时间来缓存,不然更新是个问题

setlocale(LC_ALL,"zh_CN.UTF-8");//设置简体中文 日历什么的都自动显示星期几 十月 这样的
//or
setlocale(LC_TIME,"zh_CN.UTF-8");
///////// test ////////
setlocale(LC_TIME,"zh_CN.UTF-8");
echo strftime("Today is %A");
setlocale(LC_TIME,"en.UTF-8");
echo strftime("Today is %A");
setlocale(LC_TIME, 'ca_ES');
echo strftime("Today is %A");

使用的locale 参考地址:http://docs.moodle.org/dev/Table_of_locales
http://tw.php.net/manual/zh/function.setlocale.php

使用如下代码生成中文验证码测试环境正常,生产环境乱码

imagettftext($im, 12, 0, 6, 15, $black, $font, '中文测试');

所有的编码都是UTF-8的编码,就不存在网上很多网站说的转GBK/GB2312之类的问题

经过对比2台服务器的phpinfo()的区别发现GD的编译参数有所有区别 不能正常显示的服务器多了一个

enable-gd-jis-conv 参数,PHP官方的解释:GD: Enable JIS-mapped Japanese font support.

再GOOGLE之,解释如下:非ASCII字符都会按照日文的方式编码,直接看上面生成的图片也确实发现

像日文符号。经过测试如下代码可以解决这个问题:把中文转换成HTML实体

$str=mb_convert_encoding('汉字', "html-entities", "utf-8");
imagettftext($im, 12, 0, 6, 15, $black, $font, $str);

apply_filters定义了一个过滤器,如果你在开发插件可能会接触比较多,

在你自己的插件里面使用这个函数,可以方便的让其他的插件再定制你的内容

同理也可以让你去控制别人插件的内容输出

最近订单一个插件需要修改货币符号,用到了这个方法。

定义处:

'options' => array_unique(apply_filters('wpdeals_currencies', array(
'USD' => __( 'US Dollars ($)', 'wpdeals' ),
'EUR' => __( 'Euros (€)', 'wpdeals' ),
)

为了不修改原插件的代码我们使用add_filter改变其行为

继续阅读

从单行文本从匹配URL的标题 即:<a href=”>xxxx</a> 其中的xxx的内容
测试文本

<a href=”/checkdomain=yes&oq=%E9%87%8D%E5%BA%86&jseesion=c48bbf272f9c609a”>关键字1</a>
<a href=”/checkdomain=yes&oq=%E9%87%8D%E5%BA%86&jseesion=c48bbf272f9c609a”>关键字2</a>

$preg = '/&oq='.urlencode($word).'(.*?)">(.*?)/i';
preg_match_all($preg , $ret, $arr);

关键点:(.*?) 这2个都表示非贪婪模式匹配,第一个针对双引号,第二个针对尖括号>

安装好了LAMP环境,访问PHP应用提示:Can’t connect to MySQL server on PHP错误,而从命令行可以访问。

确认问题是:fedora的安全机制导致的,fedora 为了安全默认安装了 SElinux ,这个问题就是SElinux的设置引起的。
简单的测试办法: getenforce 查看当其的运行状态 (如果没在运行状态,那就是另外的问题了。)
改变其运行状态: setenforce 1(启动) setenforce 0 停止
本次问题测试setenforce 0 网页正常访问。确认是SELINUX的问题

解决方案:setsebool -P httpd_can_network_connect=1 执行这个命令 重启httpd服务 OK。
参考文章:http://stackoverflow.com/questions/4078205/php-cant-connect-to-mysql-with-error-13-but-command-line-can