no ugly url

一个极其简单的wordpress插件, 让url清清爽爽, 拒绝难看的url.

<?php>
/*
* Plugin Name: no ugly url
* Plugin URI: http://lshuzhi.com/no-ugly-url/
* Description: not use ugly permalinks such as http://lshuzhi.com/%e6%a0%87%e9%a2%98/
* Description(Chinese): 避免难看的url,例如http://lshuzhi.com/%e6%a0%87%e9%a2%98/
* Version: 1.0.0
* Author: shuzhi
* Author URI: http://www.lshuzhi.com/no-ugly-url/
* License: GPL
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/

add_filter( ‘wp_unique_post_slug’, ‘wp_plugin_no_ugly_url’, 0, 2);

function wp_plugin_no_ugly_url($slug, $post_ID) //, $post_status, $post_type, $post_parent, $original_slug )
{
    if ( strpos($slug, ‘%’) !== false ) {
    $slug = $post_ID;
    }
    return $slug;
}
<?>

download no_ugly_url.zip

how to develop wordpress plugin?

怎样开发wordpress 插件?

0. 阅读官方的文档

1. 根据插件要完成的任务, 找一个适当的时机触发插件. 找的方法, 假设插件是filter, 那么查看所有apply_filters, 看哪个适合. 可能有多个场合都行, 但必有一个最合适的(如果选择的时机不好, 那么可能会增加系统负担,也可能会有副作用).
 nbsp;nbsp;nbsp; 例如, 我讨厌url中出现乱七八糟的东西, 看到类似 http://lshuzhi.com/chinese-title-%e6%b5%8b%e8%af%95%e4%b8%ad%e6%96%87%e6%a0%87%e9%a2%98/ 这样的url就厌烦. 于是想写个插件避免它. 查看apply_filters之后, 发现有一个时机, 那就是在wordpress根据标题生成唯一slug时(触发标记是wp_unique_post_slug). 于是add_filter(‘wp_unique_post_slug’, ‘no_ugly_url’), 在 no_ugly_url中检查传过来的参数, 看里面是否包含字符’%’, 包含的话就改成文章的ID. 如果文章标题本身是清爽的, 那么一切照旧, 否则直接使用文章ID即可.

2. 注意在同一个时机, 可能有多个插件都要运行, 要给别人机会. 插件优先级能低不就高.

3. 如果居然没有合适的时机触发你的插件, 那么只好与wordpress官方联系, 建议在源程序某处增加插件触发机会(触发位置和标记).

4. 能用插件实现, 最好使用插件, 而不是修改源程序. 因为修改源程序, 今后升级是个麻烦事.

例子: 一个极其简单的插件, 避免url中出现像乱码一样的东西.

No ugly url

wordpress印象

用了用wordpress,发现问题多多。
1. 默认使用文章标题作为URL,但标题为中文,它就傻眼了。即使没有中文,如果有标点符号,那么它生成的URL也很难看。
2. 固定链接设置更改后,现有文章无法访问了。此时只好将设置改成“朴素”,似乎别无它法。
3. 编辑器无法输入字体,我辛辛苦苦输入的文章,带字体,有上标、下标,但复制过来,全部丢失了。上标下标一丢失,文章无法卒读。本来是a的n次方,结果成了an,不可接受。
4. 那么插入图片吧,既然排版信息都丢失了,那么我将截屏放上来先凑合凑合,结果不行。无法在编辑期间上载图片。使用图片的话很麻烦.
5. 编辑器有大bug. 修改的时候, 一碰键盘, 输入焦点就跑了, 结果只能输入1个字符. 其余几个到了文章尾部. 令人感到莫名其妙.

Chinese title will cause page not found

页面呈现这样的信息:

有点尴尬诶!该页无法显示。

这儿似乎什么都没有,试试搜索?

用Safari访问,可以清楚地看到URL是这样的:
http://lshuzhi.com/chinese-title-测试中文标题/

用IE访问,URL是这样的:
http://lshuzhi.com/chinese-title-%e6%b5%8b%e8%af%95%e4%b8%ad%e6%96%87%e6%a0%87%e9%a2%98/

这都是什么人的主意啊,用这么既难看,又费事,又无法访问的URL啊.

—-

进入后台,在设置里面,选择固定链接,将其改成”数字型”或”朴素”.

解决一个问题不能用带来更大问题的方法来实现. 上面的程序员意图让url有点意义,http://lshuzhi.com/chinese-title-will-cause-page-not-found/看上去的确比http://lshuzhi.com/archives/32更有意义,但副作用太大了,代价高到在某些情况下无法访问,那就有点过头了.

不可思议,改成”数字型”仍然无法访问, 而且这次连报错页面也没有了,直接让浏览器显示404页面了

再改成”朴素”看看如何.

幸好,”朴素”没有问题.

wordpress已经发展这么多年了,怎么还有这样的低级错误?

openssl 1.1.0e installation on macos 10.12(sierra)

openssl 1.1.0e installation on macos 10.12(sierra)

第1次尝试,失败:

./config –prefix=/usr
permission denied

sudo ./config –prefix=/usr
Configured

make
permission denied
sudo make
sudo make test
sudo make install

unable to create /usr/include

看来, macos不允许往/usr/安装东西,还是安装到默认的目录/usr/local/下吧:
重来

sudo make clean

./config
permission denied

sudo ./config

sudo make

sudo make test
md2 is not supported on this system
rc5 is not supported on this system

sudo make install

最终安装到了 /usr/local/下了
这样,机器上有两个版本的openssl可执行程序
一个是系统自带的,在/usr/bin/里面,一个在/usr/local/bin/里面

————

不过 Xcode 似乎无法访问 /usr/…下面的库文件
编译程序报错:

Undefined symbols for architecture x86_64:
“_AES_decrypt”, referenced from:
_main in main.o
“_AES_encrypt”, referenced from:
_main in main.o
“_AES_set_decrypt_key”, referenced from:
_main in main.o
“_AES_set_encrypt_key”, referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

在General下欲添加libcrypto.a到Frameworks里面,但弹出的对话框根本不允许访问/usr
怎么办?

按组合键(和在Finder里面Go to folder一样): Command+Shift+G
手工输入 /usr/local/lib/ 即可

RSA Private key .pem file composition

好奇心驱使我看了一眼我产生的RSA密钥中的两个素数, 看到构成如下:

openssl
rsa -in key.pem -text

modulus: 1024 bits
publicExponent: 17 bits
privateExponent: 1024 bits
prime1: 512 bits
prime2: 512 bits
exponent1: 512 bits
exponent2: 512 bits
coefficient: 360 bits

前面5个很容易理解,分别是 n, e, d, p, q
其中:
n = p ✖︎ q
e=65537(基本是个常数,当前openssl genrsa仅支持3 and 65537,默认使用65537)

后面3参数是什么?

exponent1: d % (p-1) 简称dp
exponent2: d % (q-1) 简称dq
coefficient: 又称InverseQ,它满足 q逆 ✖︎ q = 1 % p

后面这三个数可以加快解密过程, https://en.wikipedia.org/wiki/RSA_(cryptosystem) 有说明

解密 m = c的d次方 % n
可以用下面的过程求得:
m1 = c的dp次方 % p
m2 = c的dq次方 % q
h = ( q逆 ✖︎ (m1 – m2 ) ) % p
m = m2 + h ✖︎ q
这4步所用到的数都比n要小得多