SQLの窓

2017年04月15日


PHP で漢字スペースと通常スペースのトリムとPHP正規表現チェッカー(置き換え)

※ 昔使っていた『PHP正規表現チェッカー』のサイトが閉鎖されたので他のサイトに変更しました

PHP では trim と言う関数で、文字列の先頭および末尾にあるホワイトスペースを取り除く事ができますが、デフォルトでは以下の文字を削除します。
" " (ASCII 32 (0x20)), 通常の空白。
"\t" (ASCII 9 (0x09)), タブ。
"\n" (ASCII 10 (0x0A)), リターン。
"\r" (ASCII 13 (0x0D)), 改行。
"\0" (ASCII 0 (0x00)), NULバイト
"\x0B" (ASCII 11 (0x0B)), 垂直タブ
で、日本語スペースはこのままでは削除してくれないので、追加してみると普通に削除してくれました。 Run Code で実行
<?php

    $kj = "漢字表示";
    $kj_space = " ";
    $a_space = " ";
   

    $str = "{$kj_space}{$a_space}{$kj}{$kj_space}{$a_space}";

    $str = trim($str, "{$a_space}\t\n\r\0\x0B{$kj_space}");
    
    print "|{$str}|";
    
?>
また、同様の結果を preg_replace で得る方法もテストしてみました。この場合重要なのは、パターン修飾子 の "u" でした。(パターンと対象文字列は、 UTF-8 として処理されます)

Run Code で実行
<?php

    $kj = "漢字表示";
    $kj_space = " ";
    $a_space = " ";
   

    $str = "{$kj_space}{$a_space}{$kj}{$kj_space}{$a_space}";

    $str = preg_replace( "/^[ \s]+/u", "", $str );
    $str = preg_replace( "/[ \s]+$/u", "", $str );
    
    print "|{$str}|";
    
?>

また、正規表現のパーターンを一つにして一回で置換する場合は以下のようになります
<?php

    $kj = "漢字表示";
    $kj_space = " ";
    $a_space = " ";
   

    $str = "{$kj_space}{$a_space}{$kj}{$kj_space}{$a_space}";

    $str = preg_replace( "/^[ \s]+|[ \s]+$/u", "", $str );
    
    print "|{$str}|";
    
?>
この場合、重要なのは | を使った構文です

確認は、PHP正規表現チェッカー(置き換え) で解りやすく行う事ができます

▼ パターン文字列は ^[ \s]+|[ \s]+$


PHP正規表現チェッカーで デベロッパーツールを F12 で開いて(コンソール) 以下を実行できます。
$("input[name='pattern").val("^[ \\s]+|[ \\s]+$");$("input[name='replacement']").val("削除");$("#subject").val("  漢字表示  ");$('#preg_replace').keyup();


※ このサイトでは、jQuery が使用されています


posted by lightbox at 2017-04-15 14:15 | PHP + ベーシック | このブログの読者になる | 更新情報をチェックする

2016年05月05日


PHP で HTML数値エンティティを、目的のキャラクタセットの文字列に変換する

テキストエディタが優秀な場合は、直接ソースに書いてもいいのですが、古いエディタだと UTF-8 の文字列を直接書けない場合もあります。もちろん、数値データから文字列化する処理に有効ですが、マニュアルには肝心の『変換するコード領域を指定する配列』の説明がありません

以下は簡単なサンプルですが、0x2A6D5 のほうは変換されず、0x2A6D6 のほうは変換されます
	$convmap = array(0x0, 0x2A6D5, 0, 0xFFFFF);
	$wk = mb_decode_numericentity("&#173782;", $convmap, 'UTF-8');	
	print $wk;

	$convmap = array(0x0, 0x2A6D6, 0, 0xFFFFF);
	$wk = mb_decode_numericentity("&#173782;", $convmap, 'UTF-8');	
	print $wk;

0x0 から 0x2A6D6 の範囲のみ変換します。0 はオフセットなので通常は 0 として使いません( 0x2A6D5 では、1 にすれば変換対象になります )。最後の 0xFFFFF はマスクなので、そのまま利用するという意味で全てのフラグが on である 0xFFFFF を使用しています

0x2A6D6 の漢字に関しては、こちらより確認して下さい



𪛖


タグ:PHP
posted by lightbox at 2016-05-05 19:38 | PHP + ベーシック | このブログの読者になる | 更新情報をチェックする

2015年11月02日


PHP : $_GET、$_POST、$_SESSION とグローバル変数全ての簡単な表示方法

$GLOBALS はスーパーグローバル変数を含む、ほぼ全てのグローバル変数を保持しています。そこで、print_r で取得できる内容から、正規表現で $_COOKIE と $_FILES を削除したものを表示しています。

※ 同時に get_include_path で、現在の include_path をパス単位で表示しています
<?php

$debug_string = print_r($GLOBALS,true);

$debug_string = preg_replace('/\n\s+\[_[C|F].+?\)/s', '', $debug_string);

print "<br><br><hr>";
print "<pre style='font-weight:bold;white-space:pre-wrap;'>";
print $debug_string;
print "--------------------------------------\n";
print_r( explode(PATH_SEPARATOR,get_include_path()) );
print "</pre>";

?>


print_r は、このように出力結果を文字列として戻す事ができるので、デバッグ時にファイルに出力するのに有効です

▼ 表示結果の例( windows )
Array
(
    [_GET] => Array
        (
            [update_type] => 1
            [syain] => 0053
            [order] => 氏名
        )

    [_POST] => Array
        (
        )

    [rpath] => C:\httpd142p\if_skeleton\lightbox99\
    [_SESSION] => Array
        (
            [charset] => utf-8
            [iframe_id] => target
        )

    [server] => localhost
    [db_name] => lightbox
    [user] => root
    [password] => パスワード
    [connect] => mysqli Object
        (
            [affected_rows] => 5
            [client_info] => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
            [client_version] => 50010
            [connect_errno] => 0
            [connect_error] => 
            [errno] => 0
            [error] => 
            [error_list] => Array
                (
                )

            [field_count] => 12
            [host_info] => localhost via TCP/IP
            [info] => 
            [insert_id] => 0
            [server_info] => 5.6.17
            [server_version] => 50617
            [stat] => Uptime: 15857  Threads: 1  Questions: 288  Slow queries: 0  Opens: 71  Flush tables: 1  Open tables: 64  Queries per second avg: 0.018
            [sqlstate] => 00000
            [protocol_version] => 10
            [thread_id] => 76
            [warning_count] => 0
        )

    [query] => select * from `社員マスタ`
where 管理者 is NULL order by 氏名

    [result] => Array
        (
            [0] => 社員マスタ
            [1] => mysqli_result Object
                (
                    [current_field] => 0
                    [field_count] => 13
                    [lengths] => 
                    [num_rows] => 0
                    [type] => 0
                )

            [2] => コード名称マスタ
            [3] => mysqli_result Object
                (
                    [current_field] => 0
                    [field_count] => 7
                    [lengths] => 
                    [num_rows] => 3
                    [type] => 0
                )

            [4] => 社員マスタ
            [5] => mysqli_result Object
                (
                    [current_field] => 0
                    [field_count] => 12
                    [lengths] => 
                    [num_rows] => 5
                    [type] => 0
                )

        )

    [ErrorMessage] => 
    [php_errormsg] => Undefined variable: ErrorDisable
    [row] => 
    [sentaku] => 
    [GLOBALS] => Array
 *RECURSION*
)
--------------------------------------
Array
(
    [0] => .
    [1] => C:\php\pear
    [2] => C:\httpd142p\if_skeleton\lightbox99\common
    [3] => C:\httpd142p\if_skeleton\lightbox99\db
    [4] => C:\httpd142p\if_skeleton\lightbox99\view
)
データベースのテーブル別に配列を使って処理すると、後から確認しやすくなります
posted by lightbox at 2015-11-02 14:30 | PHP + ベーシック | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり