PHPで前後の半角スペースと一緒に全角スペースやタブも除去する
PHPで前後のスペースをとるシステム関数としてはtrim()があります。
trim()では第二引数に取り除く文字列を指定できます。
これを利用してよく下のようなコードで
前後のスペースを除去するソースが紹介されています。
しかし、実はこのコードには大きな落とし穴が、、、
trimはマルチバイトに対応していないため、全角スペース除去がうまくいかない可能性があるのです。
ここは正規表現で対応してみます。
かつUTF-8だのとPHPの内部処理エンコードに依存しないコードを・・
これをSmartyのプラグイン用に作成してみました。
プラグインディレクトリはSmarty/libs/pluginsです。
Smartyテンプレート側で以下のように呼び出し使います。
trim()では第二引数に取り除く文字列を指定できます。
これを利用してよく下のようなコードで
前後のスペースを除去するソースが紹介されています。
function alltrim($str){
$str = trim($str);
$str = trim($str," ");
return $str;
}
$str = trim($str);
$str = trim($str," ");
return $str;
}
しかし、実はこのコードには大きな落とし穴が、、、
trimはマルチバイトに対応していないため、全角スペース除去がうまくいかない可能性があるのです。
ここは正規表現で対応してみます。
かつUTF-8だのとPHPの内部処理エンコードに依存しないコードを・・
function alltrim($str){
$str = mb_ereg_replace("^[[:space:]]+", "", $str);
$str = mb_ereg_replace("[[:space:]]+$", "", $str);
return $str;
}
$str = mb_ereg_replace("^[[:space:]]+", "", $str);
$str = mb_ereg_replace("[[:space:]]+$", "", $str);
return $str;
}
これをSmartyのプラグイン用に作成してみました。
<?php
function smarty_modifier_alltrim($str)
{
$str = mb_ereg_replace("^[[:space:]]+", "", $str);
$str = mb_ereg_replace("[[:space:]]+$", "", $str);
return $str;
}
?>
modifier.alltrim.phpというファイル名でSmartyのプラグインディレクトリに保存します。function smarty_modifier_alltrim($str)
{
$str = mb_ereg_replace("^[[:space:]]+", "", $str);
$str = mb_ereg_replace("[[:space:]]+$", "", $str);
return $str;
}
?>
プラグインディレクトリはSmarty/libs/pluginsです。
Smartyテンプレート側で以下のように呼び出し使います。
{$str|alltrim}
南アフリカの治安とワールドカップ
南アフリカ・ヨハネスブルク住民のみなさんの楽しいペット散歩風景

デンジャラス
ワールドカップ間近ですね。
南アフリカのコンフェデレーションズカップも無事終わりそうです。
治安回復、順調なようですね。
・・・ところがどうやらまだまだ危険な国らしいです。
むしろ悪化しているくらい?
外務省発出の渡航情報(危険情報)2009/06/16版を閲覧すると・・・
南アフリカに対する渡航情報(危険情報)の発出/外務省
警官も信用できません
悪の華、ヨハネスブルク

こんなに近代的な街並みですが、犯罪者の巣窟なんだとか。
だめじゃん。全然だめじゃん。南アフリカ。
ワールドカップ、無理じゃん。
でもまぁ、アフリカ開催はブラッター会長の選挙公約でもあるから
無理やりにでもやるんでしょうね。
何人の観光客が被害にあうか予測もつきませんね。。。
多国籍軍でも出動させるべきかと。
追記:
ポンテタワー(ponte tower)という高層マンション。

70年代に完成した当時は最高級マンションとして
高額所得者層に引っ張りだこの物件だったそうですが
今やギャングたちのコミュニティとなってるんだとか。
マンガの世界ですよ。
内部の写真を拾ってきました。



円筒型になってるんですね。
この数多くの部屋にはどんな人々がいま生息してるんでしょう。

デンジャラス
ワールドカップ間近ですね。
南アフリカのコンフェデレーションズカップも無事終わりそうです。
治安回復、順調なようですね。
・・・ところがどうやらまだまだ危険な国らしいです。
むしろ悪化しているくらい?
外務省発出の渡航情報(危険情報)2009/06/16版を閲覧すると・・・
南アフリカに対する渡航情報(危険情報)の発出/外務省
ヨハネスブルグのダウンタウン地区
(カールトンセンター付近からヨハネスブルグ中央駅及びヒルブローに至る地区)では、
殺人、強盗、強姦、恐喝、暴行、ひったくり、車上狙い、麻薬売買等の犯罪が
時間、場所を問わず発生しています。
ワールドカップを前に治安回復どころか危険地域も拡大している様子。(カールトンセンター付近からヨハネスブルグ中央駅及びヒルブローに至る地区)では、
殺人、強盗、強姦、恐喝、暴行、ひったくり、車上狙い、麻薬売買等の犯罪が
時間、場所を問わず発生しています。
従来、比較的安全とされてきたヨハネスブルグ郊外においても
ショッピングセンター内の銀行や宝石店に武装強盗団が押し入り
警備員や駆けつけた警官との間で銃撃戦となった事件や
在留邦人がよく利用するレストランの営業時間中に拳銃強盗が押し入り
店からだけでなく客からも金品を強奪する事件も発生しています。
プレトリアやケープタウンなどの他の都市も同様ショッピングセンター内の銀行や宝石店に武装強盗団が押し入り
警備員や駆けつけた警官との間で銃撃戦となった事件や
在留邦人がよく利用するレストランの営業時間中に拳銃強盗が押し入り
店からだけでなく客からも金品を強奪する事件も発生しています。
首都プレトリア情報 >>
犯罪発生傾向もヨハネスブルグと似ており
セントラル地区において強盗や窃盗等の犯罪が日常的に発生しています。
市内に滞在中は、周囲に対する警戒を怠らず
身の安全を第一に考えて慎重に行動してください。
戦時下です。犯罪発生傾向もヨハネスブルグと似ており
セントラル地区において強盗や窃盗等の犯罪が日常的に発生しています。
市内に滞在中は、周囲に対する警戒を怠らず
身の安全を第一に考えて慎重に行動してください。
警官も信用できません
最近は特に、偽警官による犯罪の被害が目立ちます。
偽警官は、麻薬捜査を口実に走行中の車を止めて身分証明書や財布等の提示を求め
財布から高額紙幣を抜き取るといった手口を使います。
偽警官は、麻薬捜査を口実に走行中の車を止めて身分証明書や財布等の提示を求め
財布から高額紙幣を抜き取るといった手口を使います。
悪の華、ヨハネスブルク

こんなに近代的な街並みですが、犯罪者の巣窟なんだとか。
だめじゃん。全然だめじゃん。南アフリカ。
ワールドカップ、無理じゃん。
でもまぁ、アフリカ開催はブラッター会長の選挙公約でもあるから
無理やりにでもやるんでしょうね。
何人の観光客が被害にあうか予測もつきませんね。。。
多国籍軍でも出動させるべきかと。
追記:
ポンテタワー(ponte tower)という高層マンション。

70年代に完成した当時は最高級マンションとして
高額所得者層に引っ張りだこの物件だったそうですが
今やギャングたちのコミュニティとなってるんだとか。
マンガの世界ですよ。
内部の写真を拾ってきました。


円筒型になってるんですね。
この数多くの部屋にはどんな人々がいま生息してるんでしょう。
SoftBankで画像幅指定を%指定する際に、少数点まで指定するとバグる・・
携帯サイトでグラフを画像で表現しています。
具体的には
この幅指定のタグ<img src="/img/g.jpg" width="10%" height="10">の
幅指定しているパーセンテージが小数点を含む数値となると・・・
SoftBankでは思いっきりバグりました。
つまりたとえば
それどころか、近い幅で表示されるわけでもなく突拍子もない幅になってしまいます。
よくわかりません。
ひとまず対処として、今回は割合グラフ画像表示の幅指定であったため
小数点は切り捨てにして指定しました。(99.5%が四捨五入されてしまわぬように)
Smartyのテンプレートでは以下のようなソースです。
具体的には
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td>
<img src="/img/g.jpg" width="10%" height="10">
</td>
</tr>
</table>
こんな感じで、テーブルにも背景色を指定するときれいにグラフっぽく表示されるわけです。<tr><td>
<img src="/img/g.jpg" width="10%" height="10">
</td>
</tr>
</table>
この幅指定のタグ<img src="/img/g.jpg" width="10%" height="10">の
幅指定しているパーセンテージが小数点を含む数値となると・・・
SoftBankでは思いっきりバグりました。
つまりたとえば
<img src="/img/g.jpg" width="37.5%" height="10">
としても画像幅が37.5%とならないのです。それどころか、近い幅で表示されるわけでもなく突拍子もない幅になってしまいます。
よくわかりません。
ひとまず対処として、今回は割合グラフ画像表示の幅指定であったため
小数点は切り捨てにして指定しました。(99.5%が四捨五入されてしまわぬように)
Smartyのテンプレートでは以下のようなソースです。
<img src="/img/g.jpg" width="{$per|number_format:0}" height="10">
Smartyでstrip_tags修飾子を使うとデフォルトでは半角スペースになる
PHPにおけるstrip_tags()メソッドはHTMLタグを除去します。
Smartyにも「strip_tags」修飾子が用意されていて、
Smartyテンプレートにてタグ除去することが可能です。
しかしそのままstripg_tags修飾子を使うと
デフォルトでは半角スペースに置換されます。
第一引数にbooleanで指定します(true/false)
→指定が無ければデフォルト設定(true)となり半角スペースに置換されます。
以下はSmartyテンプレートでの記述例です。
Smartyにも「strip_tags」修飾子が用意されていて、
Smartyテンプレートにてタグ除去することが可能です。
しかしそのままstripg_tags修飾子を使うと
デフォルトでは半角スペースに置換されます。
第一引数にbooleanで指定します(true/false)
→指定が無ければデフォルト設定(true)となり半角スペースに置換されます。
以下はSmartyテンプレートでの記述例です。
タグが半角スペースになる
{$str|strip_tags}
タグが除去されるのみ
{$str|strip_tags:false}
{$str|strip_tags}
タグが除去されるのみ
{$str|strip_tags:false}
携帯サイト用に全角カナを半角カナにするためのsmarty プラグイン
全角カナを半角カナにして出力するためのSmartyプラグインです。
これを「modifier.hchar.php」というファイル名にて
プラグイン格納用デイレクトリSmarty/libs/pluginsに設置します。
Smartyテンプレートでは以下のようにして使います。
これで、文字列に全角カナが混入していれば半角カナに自動変換されます。
<?php
function smarty_modifier_hchar($str)
{
return mb_convert_kana($str,"ka",mb_internal_encoding());
}
?>
function smarty_modifier_hchar($str)
{
return mb_convert_kana($str,"ka",mb_internal_encoding());
}
?>
これを「modifier.hchar.php」というファイル名にて
プラグイン格納用デイレクトリSmarty/libs/pluginsに設置します。
Smartyテンプレートでは以下のようにして使います。
{$string||hchar}
これで、文字列に全角カナが混入していれば半角カナに自動変換されます。