とんでもブログ ~ プログラマのWeb開発メモ (PHP, CSS, JavaScript) -3ページ目

PHP / 検索ボックス用文字列分割ライブラリ

検索ボックス(検索窓)に入力された文字列を、単語ごとに分割して配列に収める。

これをやりたいと思いましてググったところ、出てこないので作りました。


全角スペース、半角スペース、タブ、改行全てをデリミタ(区切り文字)として分割します。

ライブラリって程じゃないんですが、サーチエンジンで引っかかりやすいと思ってこんなタイトルになりました。


$beforeは検索ボックスに入力された文字、$after_arrayは分割後の配列です。


// 前後のスペースを取り除く
$tmp = mb_ereg_replace('^[[:space:]]*(.*?)[[:space:]]*$', '\1', $before);
// 検索語を区切る
$after_array = mb_split('[[:space:]]+', $tmp);


この前にmb_regex_encoding()の指定が必要なので忘れないで下さい。


PHP / 閉じタグ(終了タグ)直後の改行が出力に反映されない

以下のようなソースを書いたところ


<div>
<?php echo "abcde" ?>
</div>

こうなっちゃうんです。

<div>
abcde</div>

改行コードが削除されてしまうんですよ。

?>の直後にTABとかスペースを入れると有効なのに、なぜか改行だけ。


それで、対処方法を調べてみました。


PHP公式ページに書いてありました。

http://jp.php.net/manual/ja/tutorial.firstpage.php


意訳すると、「仕様ですので改行コードを自力で出力して下さい」とのこと。

特にエスケープ方法とかもないようで、残念です。


CakePHP / mod_rewriteでスラッシュ補完

SEOを考慮したmod_rewriteの設定。

以下の動きになるようにしたかったんです。


---


http://xxx/abc

http://xxx/abc.html

http://xxx/abc/index/

http://xxx/abc/index.html


→ 上記全て http://xxx/abc/ に変換


http://xxx

http://xxx/index/

http://xxx/index.html


→ 上記全て http://xxxxx/ に変換

---


で、ようやくできました。
/cakeroot/app/webroot/.htaccess を以下のように設定すればOK


RewriteEngine On

# ここにはCakeRootのパスをいれる
RewriteBase /cakeroot

# 末尾のindex.htmlを取り除く
RewriteCond %{REQUEST_URI} /index.html?$
RewriteRule ^(.*)index.html?$ $1 [R=301,L]

# 末尾のindexもしくはindex/を取り除く
RewriteCond %{REQUEST_URI} /index/?$
RewriteRule ^(.*)index/?$ $1 [R=301,L]

# 末尾が.htmlもしくは.htmで終わっていればスラッシュに置換する
RewriteRule ^(.*)\.html?$ $1/ [R=301,L]

# 末尾がスラッシュで終わっていない場合、
# かつファイル拡張子がついていない状態の場合は
# スラッシュ補完する
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.[^/\.]+$
RewriteRule ^(.*)$ $1/ [R=301,L]

# 以下Cakeデフォルト
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

いや、本当に苦労しました。

正直mod_rewriteの設定で、こんなに苦労するとは思いませんでした。


コントローラ内で振り分けすることもできましたが、コントローラ毎に何か設定する要素が増えそうで嫌だったので、mod_rewriteでなんとかすることにしました。


何かありましたらご指摘いただけると嬉しいです。



【参考URL】

http://d.hatena.ne.jp/happy-lucky/20080210/p1

http://dxd8.com/archives/141/


Googleマップストリートビューが日本上陸

ついにGoogleマップ、ストリートビュー機能が日本上陸してしまいました。


例えば、新宿アルタ前渋谷ハチ公前 など。グリグリできますので、ご自宅付近を探してみてください。


どうやらこんなカメラ で撮影しているらしいです。


アメーバブログで文章を折り返さずそのまま表示する

アメブロでプログラムソースをそのまま公開したいと思いまして、記事の編集画面にコピペしたんですが、どうも思うようにいきません。


意図しないところで折り返しが入ったり、TABやスペースが反映されずに表示されてしまいます。

これを解決する方法をググっても出てこなかったのでスタイルシートを使って自分でなんとかしてみました。


記事の編集時に、「HTMLタグを表示」をクリック、以下を入力します。


<pre style="overflow: auto; overflow-x:scroll; width: 100%; background-color: #F0F0F0">
ここにソースをコピペ
</pre>

必要ならこれに color: #FF0000; だとか指定すれば文字色が赤になったりします。


今のところこれで満足していますが、もっと良い方法があるのでしたら教えていただけると幸いです。


【参考URL】

http://weblog.2-d.jp/pc/internet/000010.php

http://www.wizard-limit.net/mt/pc/archives/000336.html




---

【2008.08.08追記】


この記事を受けて、せっかくCSS化するなら.cssファイルに書いてしまえばいいじゃないかという記事を書いて下さった『Web Programmer Closeβ』のsatooさん、ありがとうございます。


http://ameblo.jp/satoo-original/entry-10124601803.html



CSSを直接編集できるデザインを使っている場合はそこに記述すればOKです。

また直接編集できなくても、サイドバーのフリープラグインが左側にあるデザインの場合、プラグイン中に書けばOKです。要はpreタグより前に該当cssが読み込まれれば良いのです。


<style type="text/css">
.subContents pre {
    overflow: auto;
    overflow-x:scroll;
    width: 100%;
    background-color: #F0F0F0;
}
</style>


このサイトでは上記CSSをフリープラグイン設定に記述しています。

これで<pre></pre>を書くだけで良くなり、すごく楽になりました。