FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

WordPressのwp-login.phpへのアタック

ここにも、WordPressのアタックがやってきました


188.143.XXX.XXX - - [27/Mar/2013:22:51:49 +0900]
"POST /wordpress/wp-login.php HTTP/1.1" 200 3408 "-"
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0;
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1); .NET CLR 3.5.30729)"


こんな感じで、総当りをやってきます。
たまたまアクセスログを見ている最中だったので、こわくなってwordpressのディレクトリを変えましたが
おそろしいですね。

http://wingedlove.com/post/1763
で、この攻撃はUserAgentがIEでやってくるのでhtaccessでIEをはじく方法がありましたので
その対応もやっておきました。

wordpressのwp-login.phpがあるディレクトリの .htaccessファイルに


<Files wp-login.php>
order allow,deny
allow from all
SetEnvIfNoCase User-Agent "(MSIE)" loginspam
Deny from env=loginspam
</Files>

を入れておきました。
これだとIEでのアタックははじいてくれますが、それ以外でのアタックはだめですが
まあ、とりあえずは、こうしておきます。

スポンサーサイト

CakePHPの単数形・複数形の命名規則

CakePHPは名前をつけるときに、同じものでも、単数形と複数形の両方を使わないといけないんですね。

簡単に書くと、
データベースのテーブル:複数形のアンダースコア記法
フィールド名:アンダースコア記法
モデルクラス:単数形のキャメル記法
モデルクラスのファイル名:/app/Model/モデルクラス名.php
コントローラクラス:複数形のキャメル記法+Controller
コントローラのファイル名:/app/Controller/コントローラクラス名.php
ビューのテンプレート:/app/View/コントローラ名/アンダースコア表記_アクション名.ctpコントローラの関数名を小文字にしてアンダースコアでつなぐ

という感じです。
問題は、単数形と複数形の両方で名前をつけないといけないということで、
日ごろから使い慣れない日本人にとっては、つらいような気がします。
sをつけるのか、esをつけるのか、はたはま特殊な語尾になるのか、ややこしいですね。

http://www.cpa-lab.com/tech2/inflects/
には、単数形と複数形の相互変換をやってくれるみたいですが、CakePHP version 1.2あたりのものなのでversion2以降でもそのまま使えるかどうかはわかりませんね。

lib/Cake/Utility/Inflector.phpには、実際に単数形と複数形の変換をやっているようなコードがありますが、単数形がpersonで複数形がpeopleなんて、すぐには思いつかないかも。。

実行時にいちいち単数形・複数形変換をやっているのかもしれませんが、
なんか処理時間がもったいないような気がします。
日本人からするとそんなに単数形・複数形にこだわらなくてもいいような気もしますが、
Nativeからすると許せないんですかね。

「PCRE has not been compiled with Unicode support.」対策

CakePHPをインストールしてみました。
しかし

PCRE has not been compiled with Unicode support.

というWaringがでてしまいます。
検索してみるとCentOS5だとpcreがデフォルトではUnicode properties supportがないみたいです。

実際やってみると

# pcretest -C
PCRE version 6.6 06-Feb-2006
Compiled with
UTF-8 support
No Unicode properties support
Newline character is LF
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack


そこで
http://welcomevac201world.blog84.fc2.com/blog-entry-266.html
を参考にして対策しました。

まず、

# wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/pcre-6.6-2.el5_1.7.src.rpm

# rpm -ivh pcre-6.6-2.el5_1.7.src.rpm

でrpmを取得して解凍します。
そして、/usr/src/redhat/SPECS/pcre.specのconfigureオプションを

%configure --enable-utf8

から

%configure --enable-utf8 --enable-unicode-properties

に変更します。

そして

# rpmbuild -ba /usr/src/redhat/SPECS/pcre.spec
# rpm -Uvh /usr/src/redhat/RPMS/x86_64/pcre-6.6-2.7.x86_64.rpm

でビルドして更新します。

これでhttpdを再起動して

# pcretest -C
PCRE version 6.6 06-Feb-2006
Compiled with
UTF-8 support
Unicode properties support
Newline character is LF
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack

にめでたくなりました。
PHPの

PCRE has not been compiled with Unicode support.

のWaringも消えました。

チャットルームのFC2解析タグ

チャットルームにもFC2アクセス解析のタグをはっているのですが、
これがなかなか一筋縄ではいきませんでした。

下のほうに貼ると、部屋に入室したときに、一旦ボヨ~~~ンっと上下に間延びした感じになってしまいます。
一番上に貼ると、無用の隙間が上に空いてしまいます。

しばらく貼るのをあきらめていたのですが、あるときタグを


<div id=analyzer style="display:none;">
</div>


で囲んで上部に貼り付けると隙間もできずに、ボヨ~~ンともならずに表示できるようになりました。

めでたしめでたしですが、なんでこんなことになっているんでしょうね。。

http://chattera.net/

ダイアクリティカルマーク

ユニコードの中にダイアクリティカルマーク(Combining Diacritical Marks)というのがあって
他の文字の上や下に記号を追加したりします。
たとえばドイツ語のウムラウトのような感じです。

ˉ̞̭ ( ›◡ु‹ ) ˄̻ ̊

のような顔文字もこのダイアクリティカルマークを使って書かれています。
http://chattera.net/nickname/unicodeana.php?key=%CB%89%CC%9E%CC%AD+%28+%E2%80%BA%E2%97%A1%E0%A5%81%E2%80%B9+%29+%CB%84%CC%BB%E2%80%89%CC%8A


ユニコード表のダイアクリティカルマークのページは、マークのコードだけを表示していたので
結果的に何も表示されていませんでしたので、記号が付加される文字を一緒に入れることによって
どんな記号が追加されているのかを見やすく表示するようにしました。


http://chattera.net/nickname/unicodetable.php?page=0x0300
以下はこのユニコードページをiframeで埋め込んだものです。


マウスカーソルをあてたところを拡大

ユニコードの文字列を解析するページ
http://chattera.net/nickname/unicodeana.php
や、その先のユニコード表
http://chattera.net/nickname/unicodetable.php?page=0x0000
もなのですが、
普通のフォントサイズで表示した場合ユニコードの文字が小さくて
細かい形状がよく見えないことがあります。
だからといって全体を拡大するとスペースがもったいないですね。
そこで、マウスカーソルをあてたところを拡大して表示する方法はないものかと
思って探していたら、目からうろこのような方法がありました。

それはその要素に対して


.codelist .fig:hover {
font-size: 8em;
}


のように、hoverのときに、font-sizeを大きくしてやればいいんですね。
まあ、画面がごにょごにょ動くので、きもちわるいと思う人もいるかもしれませんが。。。

以下はこのユニコードページの一つをiframeで埋め込んだものです。


ユニコードの文字列を解析するページを作成しました

ユニコードの文字列を解析するページを作成しました。

チャットでは、ユニコードを駆使して面白いニックネーム・ハンドルネームをつくったり、
顔文字をつくったりします。
ただ自分で作ってみようと思ったときには、なかなかうまくいきませんね。
そのため、ユニコードの文字列を解析して、どのようなカテゴリーのコードで
できているのかを表示するページを作ってみました。
アドレスは
http://chattera.net/nickname/unicodeana.php
になります。

例えば、

(。≖ˇェˇ≖。) 。

のような文字列を解析したい場合は、このページにいって、この文字列を入力して解析ボタンを押します。
すると、


文字 コード Unicodeカテゴリー コード範囲
( 0x0028 基本ラテン文字 (ASCII互換) Basic Latin 0x0000 0x007F
。 0x3002 CJKの記号と句読点 CJK Symbols and Punctuation 0x3000 0x303F
≖ 0x2256 数学記号 Mathematical Operators 0x2200 0x22FF
ˇ 0x02C7 前進を伴う修飾文字 Spacing Modifier Letters 0x02B0 0x02FF
ェ 0xFF6A 全角・半角形 Halfwidth and Fullwidth Forms 0xFF00 0xFFEF
ˇ 0x02C7 前進を伴う修飾文字 Spacing Modifier Letters 0x02B0 0x02FF
≖ 0x2256 数学記号 Mathematical Operators 0x2200 0x22FF
。 0xFF61 全角・半角形 Halfwidth and Fullwidth Forms 0xFF00 0xFFEF
) 0x0029 基本ラテン文字 (ASCII互換) Basic Latin 0x0000 0x007F
0x0020 基本ラテン文字 (ASCII互換) Basic Latin 0x0000 0x007F
。 0x3002 CJKの記号と句読点 CJK Symbols and Punctuation 0x3000 0x303F

のような結果が表示されます。
このページはPOSTだけでなく、GETでも使用できるようにしていますので、
http://chattera.net/nickname/unicodeana.php?key=%28%E3%80%82%E2%89%96%CB%87%EF%BD%AA%CB%87%E2%89%96%EF%BD%A1%29+%E3%80%82
のようにリンクすることもできます。

ユニコード表を作成しました

ユニコード表を作成しました。
ユニコードは、いくつかの領域に分かれていますので、
その領域ごとにコード表を表示するようにしました。

ニックネームの作成や、会話に使用する顔文字等に使ってください。
http://chattera.net/nickname/unicodelist.php

領域は以下のようになっています。
このブログでは表をいれるのが面倒なので単なる引用です。


0x0000 0x007F Basic Latin 基本ラテン文字 (ASCII互換)
0x0080 0x00FF Latin-1 Supplement ラテン1補助
0x0100 0x017F Latin Extended-A ラテン文字拡張A
0x0180 0x024F Latin Extended-B ラテン文字拡張B
0x0250 0x02AF IPA Extensions IPA拡張 (国際音声記号)
0x02B0 0x02FF Spacing Modifier Letters 前進を伴う修飾文字
0x0300 0x036F Combining Diacritical Marks ダイアクリティカルマーク(合成可能)
0x0370 0x03FF Greek and Coptic ギリシア文字・コプト文字
0x0400 0x04FF Cyrillic キリール文字(キリル文字)
0x0500 0x052F Cyrillic Supplement キリール文字追加
0x0530 0x058F Armenian アルメニア文字
0x0590 0x05FF Hebrew ヘブライ文字
0x0600 0x06FF Arabic アラビア文字
0x0700 0x074F Syriac シリア文字
0x0750 0x077F Arabic Supplement アラビア文字追加
0x0780 0x07BF Thaana ターナ文字
0x07C0 0x07FF NKo ンコ文字
0x0900 0x097F Devanagari デーヴァーナーガリー文字
0x0980 0x09FF Bengali ベンガル文字
0x0A00 0x0A7F Gurmukhi グルムキー文字
0x0A80 0x0AFF Gujarati グジャラーティ文字(グジャラーティー文字)
0x0B00 0x0B7F Oriya オリヤー文字
0x0B80 0x0BFF Tamil タミル文字
0x0C00 0x0C7F Telugu テルグ文字(テルグー文字)
0x0C80 0x0CFF Kannada カンナダ文字
0x0D00 0x0D7F Malayalam マラヤーラム文字
0x0D80 0x0DFF Sinhala シンハラ文字
0x0E00 0x0E7F Thai タイ文字
0x0E80 0x0EFF Lao ラオ文字
0x0F00 0x0FFF Tibetan チベット文字
0x1000 0x109F Myanmar ミャンマー文字 (ビルマ文字)
0x10A0 0x10FF Georgian グルジア文字
0x1100 0x11FF Hangul Jamo ハングル字母0x1200 0x137F Ethiopic エチオピア文字
0x1380 0x139F Ethiopic Supplement
0x13A0 0x13FF Cherokee チェロキー文字
0x1400 0x167F Unified Canadian Aboriginal Syllabics 統合カナダ先住民音節 0x1680 0x169F Ogham オーム文字 (オガム文字)
0x16A0 0x16FF Runic ルーン文字
0x1700 0x171F Tagalog タガログ文字
0x1720 0x173F Hanunoo ハヌノオ文字
0x1740 0x175F Buhid ブヒッド文字
0x1760 0x177F Tagbanwa タグバヌワ文字
0x1780 0x17FF Khmer クメール文字
0x1800 0x18AF Mongolian モンゴル文字(蒙古文字)
0x1900 0x194F Limbu リンブ文字
0x1950 0x197F Tai Le タイ・レ文字
0x1980 0x19DF New Tai Lue 新タイ・ルー文字
0x19E0 0x19FF Khmer Symbols クメール記号
0x1A00 0x1A1F Buginese ブギス文字
0x1B00 0x1B7F Balinese バリ文字
0x1D00 0x1D7F Phonetic Extensions 表音拡張
0x1D80 0x1DBF Phonetic Extensions Supplement
0x1DC0 0x1DFF Combining Diacritical Marks Supplement ダイアクリティカルマーク追加(合成可能)
0x1E00 0x1EFF Latin Extended Additional ラテン文字拡張追加
0x1F00 0x1FFF Greek Extended ギリシア文字拡張
0x2000 0x206F General Punctuation 一般句読点
0x2070 0x209F Superscripts and Subscripts 上付き・下付き
0x20A0 0x20CF Currency Symbols 通貨記号
0x20D0 0x20FF Combining Diacritical Marks for Symbols 記号用ダイアクリティカルマーク(合成可能)
0x2100 0x214F Letterlike Symbols 文字様記号
0x2150 0x218F Number Forms 数字に準じるもの
0x2190 0x21FF Arrows 矢印
0x2200 0x22FF Mathematical Operators 数学記号
0x2300 0x23FF Miscellaneous Technical その他の技術用記号
0x2400 0x243F Control Pictures 制御機能用記号
0x2440 0x245F Optical Character Recognition 光学的文字認識、OCR
0x2460 0x24FF Enclosed Alphanumerics 囲み英数字
0x2500 0x257F Box Drawing 罫線素片
0x2580 0x259F Block Elements ブロック要素
0x25A0 0x25FF Geometric Shapes 幾何学模様
0x2600 0x26FF Miscellaneous Symbols その他の記号
0x2700 0x27BF Dingbats 装飾記号
0x27C0 0x27EF Miscellaneous Mathematical Symbols-A その他の数学記号A
0x27F0 0x27FF Supplemental Arrows-A 追加矢印A
0x2800 0x28FF Braille Patterns 点字図形
0x2900 0x297F Supplemental Arrows-B 追加矢印B
0x2980 0x29FF Miscellaneous Mathematical Symbols-B その他の数学記号B
0x2A00 0x2AFF Supplemental Mathematical Operators 追加数学演算子
0x2B00 0x2BFF Miscellaneous Symbols and Arrows その他の記号と矢印
0x2C00 0x2C5F Glagolitic グラゴル文字
0x2C60 0x2C7F Latin Extended-C ラテン拡張C
0x2C80 0x2CFF Coptic コプト文字
0x2D00 0x2D2F Georgian Supplement グルジア文字追加
0x2D30 0x2D7F Tifinagh ティフナグ文字
0x2D80 0x2DDF Ethiopic Extended エチオピア文字拡張
0x2E00 0x2E7F Supplemental Punctuation 追加句読点
0x2E80 0x2EFF CJK Radicals Supplement CJKの部首補助
0x2F00 0x2FDF Kangxi Radicals 康熙部首
0x2FF0 0x2FFF Ideographic Description Characters 漢字構成記述文字(IDC)
0x3000 0x303F CJK Symbols and Punctuation CJKの記号と句読点
0x3040 0x309F Hiragana 平仮名
0x30A0 0x30FF Katakana 片仮名
0x3100 0x312F Bopomofo 注音字母(注音符号)
0x3130 0x318F Hangul Compatibility Jamo ハングル互換字母
0x3190 0x319F Kanbun 漢文用記号(読み下し)
0x31A0 0x31BF Bopomofo Extended 注音字母拡張
0x31C0 0x31EF CJK Strokes CJK字画
0x31F0 0x31FF Katakana Phonetic Extensions 片仮名表音拡張
0x3200 0x32FF Enclosed CJK Letters and Months 囲みCJK文字・月
0x3300 0x33FF CJK Compatibility CJK互換用文字
0x3400 0x4DBF CJK Unified Ideographs Extension A CJK統合漢字拡張A
0x4DC0 0x4DFF Yijing Hexagram Symbols 易経記号
0x4E00 0x9FFF CJK Unified Ideographs CJK統合漢字
0xA000 0xA48F Yi Syllables イ文字
0xA490 0xA4CF Yi Radicals イ文字部首
0xA700 0xA71F Modifier Tone Letters 声調記号
0xA720 0xA7FF Latin Extended-D ラテン拡張D
0xA800 0xA82F Syloti Nagri シロティ・ナグリ文字
0xA840 0xA87F Phags-pa パスパ文字
0xAC00 0xD7AF Hangul Syllables ハングル音節文字
0xD800 0xDB7F High Surrogates サロゲートペア領域
0xDB80 0xDBFF High Private Use Surrogates
0xDC00 0xDFFF Low Surrogates
0xE000 0xF8FF Private Use Area 私用領域(外字領域)
0xF900 0xFAFF CJK Compatibility Ideographs CJK互換漢字
0xFB00 0xFB4F Alphabetic Presentation Forms アルファベット表示形
0xFB50 0xFDFF Arabic Presentation Forms-A アラビア表示形A
0xFE00 0xFE0F Variation Selectors 異体字セレクタ
0xFE10 0xFE1F Vertical Forms 縦書き用句読点
0xFE20 0xFE2F Combining Half Marks 半記号(合成可能)
0xFE30 0xFE4F CJK Compatibility Forms CJK互換形
0xFE50 0xFE6F Small Form Variants 小字形
0xFE70 0xFEFF Arabic Presentation Forms-B アラビア表示形B
0xFF00 0xFFEF Halfwidth and Fullwidth Forms 全角・半角形
0xFFF0 0xFFFF Specials 特殊用途文字
0x10000 0x1007F Linear B Syllabary 線文字B
0x10080 0x100FF Linear B Ideograms
0x10100 0x1013F Aegean Numbers エーゲ数字
0x10140 0x1018F Ancient Greek Numbers 古代ギリシア数字
0x10300 0x1032F Old Italic 古イタリア文字
0x10330 0x1034F Gothic ゴート文字
0x10380 0x1039F Ugaritic ウガリト文字
0x103A0 0x103DF Old Persian 古ペルシア文字
0x10400 0x1044F Deseret デゼレット文字
0x10450 0x1047F Shavian シェイヴィアン文字
0x10480 0x104AF Osmanya オスマニヤ文字
0x10800 0x1083F Cypriot Syllabary キプロス文字
0x10900 0x1091F Phoenician フェニキア文字
0x10A00 0x10A5F Kharoshthi カローシュティー文字
0x12000 0x123FF Cuneiform 楔形文字
0x12400 0x1247F Cuneiform Numbers and Punctuation
0x1D000 0x1D0FF Byzantine Musical Symbols ビザンティン音楽記号
0x1D100 0x1D1FF Musical Symbols 音楽記号
0x1D200 0x1D24F Ancient Greek Musical Notation 古代ギリシア記譜法
0x1D300 0x1D35F Tai Xuan Jing Symbols 太玄経記号
0x1D360 0x1D37F Counting Rod Numerals 算木
0x1D400 0x1D7FF Mathematical Alphanumeric Symbols 数学用英数字記号
0x20000 0x2A6DF CJK Unified Ideographs Extension B CJK統合漢字拡張B
0x2F800 0x2FA1F CJK Compatibility Ideographs Supplement CJK互換漢字追加
0xE0000 0xE007F Tags 言語タグ
0xE0100 0xE01EF Variation Selectors Supplement 異体字セレクタ補助
0xF0000 0xFFFFF Supplementary Private Use Area-A 追加私用領域A
0x100000 0x10FFFF Supplementary Private Use Area-B 追加私用領域B

PHPの整数同士の割り算

PHPの整数同士の割り算で少しはまってしまいました。
ある整数を32個ずつの区間に分けて、そのsegmentとoffsetを計算しようとして


$segment = ($seqno-1)/32;
$offset = ($seqno-1)%32;
$index = $segment*(8+1);


のようにして計算しました。
$seqnoは整数で、$indexはそのsegmentがおかれるアドレスを計算したつもりです。
ところが、$seqno=64のときに $segment = 1になるのですが(printすると表面上そう見えた)
$indexを計算すると9になるはずが、17になってしまいます。
まさか、PHPが計算ミスするはずがないと、悩んでいましたら、
PHPでは整数同士の割り算でも、端数がでると、小数まで計算してしまうんですね。。。

したがって、正しくは


$segment = (int)(($seqno-1)/32);
$offset = (int)(($seqno-1)%32);
$index = $segment*(8+1);


のようにintにキャストしてやらないといけないわけです。
いつもCやC++で書いていると、整数同士の演算は整数になるに決まっていて
それを利用したコードも書いたりするので、
PHPで整数同士の演算で小数になることがあるというのは、
いつもわすれてしまうんですよね。。

PHPでマルチバイト文字列を1文字ずつ配列に分割する

PHPでマルチバイト文字列を1文字ずつ配列に分割しようと思ったのですが、
str_split()という関数は、マルチバイトに対応していないです。
そこで調べてみるとmb_substr()を使って地道に分割する方法がありました。

function mbstr_split($str, $enc='UTF-8') {
$res = array();
while ($iLen = mb_strlen($str, $enc)) {
array_push($res, mb_substr($str, 0, 1, $enc));
$str = mb_substr($str, 1, $iLen, $enc);
}
return $res;
}

こんな感じになります。
以下のようにstr_split()と比較して実行してみると

$test = 'これはテストの文字列です。This is test string. アッチへ━━━━⊂(゚Д゚⊂⌒`つ≡≡';
$res1 = str_split($test);
print_r($res1);

$enc = mb_detect_encoding($test, 'ASCII,JIS,UTF-8,EUC-JP,SJIS');
$res2 = mbstr_split($test, $enc);

print_r($res2);


このような結果になります。

$ php mbsplit.php
Array
(
[0] =>
] =>
2] =>
3] =>
] =>
5] =>
6] =>
] =>
8] =>
9] =>
0] =>
11] =>
12] =>
3] =>
14] =>
15] =>
6] =>
17] =>
18] =>
9] =>
20] =>
21] =>
2] =>
23] =>
24] =>
5] =>
26] =>
27] =>
8] =>
29] =>
30] =>
1] =>
32] =>
33] =>
4] =>
35] =>
36] =>
7] =>
38] =>
39] => T
[40] => h
[41] => i
[42] => s
[43] =>
[44] => i
[45] => s
[46] =>
[47] => t
[48] => e
[49] => s
[50] => t
[51] =>
[52] => s
[53] => t
[54] => r
[55] => i
[56] => n
[57] => g
[58] => .
[59] =>
[60] =>
1] =>
62] =>
63] =>
4] =>
65] =>
66] =>
7] =>
68] =>
69] =>
0] =>
71] =>
72] =>
3] =>
74] =>
75] =>
6] =>
77] =>
78] =>
9] =>
80] =>
81] =>
2] =>
83] =>
84] =>
5] =>
86] =>
87] => (
[88] =>
9] =>
90] =>
91] =>
92] =>
93] =>
4] =>
95] =>
96] =>
7] =>
98] =>
99] =>
00] =>
101] =>
102] =>
03] =>
104] =>
105] =>
06] =>
107] =>
108] =>
09] =>
110] =>
111] =>
12] =>
113] =>

Array
(
[0] => こ
[1] => れ
[2] => は
[3] => テ
[4] => ス
[5] => ト
[6] => の
[7] => 文
[8] => 字
[9] => 列
[10] => で
[11] => す
[12] => 。
[13] => T
[14] => h
[15] => i
[16] => s
[17] =>
[18] => i
[19] => s
[20] =>
[21] => t
[22] => e
[23] => s
[24] => t
[25] =>
[26] => s
[27] => t
[28] => r
[29] => i
[30] => n
[31] => g
[32] => .
[33] =>
[34] => ア
[35] => ッ
[36] => チ
[37] => へ
[38] => ━
[39] => ━
[40] => ━
[41] => ━
[42] => ⊂
[43] => (
[44] => ゚
[45] => Д
[46] => ゚
[47] => ⊂
[48] => ⌒
[49] => `
[50] => つ
[51] => ≡
[52] => ≡
)


str_split()はみごとに使えてないですね。
それに比べてmbstr_split()はうまくいってます。

文字列の最初と最後の半角、全角スペースをTRIM

PHPのtrim()は半角専用なんですね。
マニュアルでは、

この関数は str の最初および最後から空白文字を取り除き、 取り除かれた文字列を返します。
2番目のパラメータを指定しない場合、 trim()は以下の文字を削除します。

” ” (ASCII 32 (0×20)), 通常の空白。
“\t” (ASCII 9 (0×09)), タブ。
“\n” (ASCII 10 (0x0A)), リターン。
“\r” (ASCII 13 (0x0D)), 改行。
“\0″ (ASCII 0 (0×00)), NULバイト
“\x0B” (ASCII 11 (0x0B)), 垂直タブ

のようです。
そこで全角を取り除く方法を探したのですが、みなさんはpreg_replace()関数を使って取り除いているようですね。

function trim_space($str) {
$str = preg_replace('/^[  ]+/u', '', $str);
$str = preg_replace('/[  ]+$/u', '', $str);
return $str;
}

[ ]内には、半角スペースと全角スペースが1つずつ入っています。

PHPの日付関数

PHPには、日付関係で便利な関数がありますね。
前の日とか前の月とか簡単にできます。


<?php
date_default_timezone_set('Asia/Tokyo');
echo "年月日:" . date("Ymd") . "\n"; //年月日
echo "年月:" . date("Ym") . "\n"; //年月
echo "日:" . date("d") . "\n"; //日
echo "1日前:" . date("Ymd",strtotime("-1 day")) . "\n"; //1日前
echo "1週間前:" . date("Ymd",strtotime("-1 week")) . "\n"; //1週間前
echo "1月前:" . date("Ymd",strtotime("-1 month")) . "\n"; //1月前
echo "1年前:" . date("Ymd",strtotime("-1 year")) . "\n"; //1年前
echo "1日後:" . date("Ymd",strtotime("1 day")) . "\n"; //1日後
echo "1週間後:" . date("Ymd",strtotime("1 week")) . "\n"; //1週間後
echo "1月後:" . date("Ymd",strtotime("1 month")) . "\n"; //1月後
echo "1年後:" . date("Ymd",strtotime("1 year")) . "\n"; //1年後
?>


これを実行すると


$ php datetest.php
年月日:20130301
年月:201303
日:01
1日前:20130228
1週間前:20130222
1月前:20130201
1年前:20120301
1日後:20130302
1週間後:20130308
1月後:20130401
1年後:20140301


のようになります。実行日は2013年3月1日です。

最初の
date_default_timezone_set('Asia/Tokyo');
はタイムゾーンがちゃんと設定されていないとエラーになって止まるのでいれました。

WordPressでmoreタグがきかない場合

WordPressでは文章の中にmoreタグを

<!--more-->

と入れておけば一覧ページではmoreタグの前まで表示されて、
「続きを読む」等のリンクが表示されます。

ところが、固定ページの中に、一覧ページを埋め込むような場合
このmoreタグの機能が効かずに、文章が全部表示されてしまいます。

調べてみた結果、$moreという変数があって、これが1の場合、moreタグがきかず、
0の場合にmoreタグがきくようです。
ソースではwp-includes/query.phpというファイルの中で


if ( is_single() || is_page() || is_feed() )
$more = 1;

というコードがありました。
固定ページでは初期値で$more = 1になってしまうので、
固定ページの中に、一覧ページを埋め込むような場合はmoreタグの機能が効かないんですね。
したがって、解決方法としては


<?php the_content('続きを読む'); >

の前に

<?php $more = 0; ?>

をいれればいいですね。

http://chattera.net/
http://chattera.net/chaberilist.php

プロフィール

chattera.net

Author:chattera.net
フリーでソフト開発の仕事をしています。
自作したこのチャットシステムは、何か世の中に役に立つこともあるかと思いますので、お呼びがかかるとうれしいですね。

連絡先は chatteranet@gmail.com です。

また、ソフト開発関連のお誘いもうけたまわっております。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。