2013年4月17日水曜日

PHPの正規表現でHTMLの実体参照を取り除く

$bodyから実体参照(たとえば&とか>、<、"など)を取り除く場合

preg_replace("/&#?[a-z0-9]{2,8};/i","",strip_tags($body));

2013年4月16日火曜日

Symfony2のBasic認証が失敗する

PHPがFastCGIで動作しているサーバの場合は.htaccessでRequestヘッダを通過させるよう設定する必要があるみたい。

Symfony2の場合はweb/.htaccessにこんな感じで。
<IfModule mod_rewrite.c>
    RewriteEngine On

    <IfModule mod_vhost_alias.c>
        RewriteBase /
    </IfModule>

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]

    # Pass Authorization headers to an environment variable
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

2013年4月15日月曜日

MySQLで結果がNULLの時に0を返すには

最近Oracleばっかり触ってたからど忘れ・・・
select COALESCE(val, 0) from XXXXXX
っと。

Googleカレンダーに「日本の祝日」カレンダーを追加するには

Googleカレンダーに「日本の祝日」カレンダーを追加するには

1.Googleカレンダーにアクセス


2.[他のカレンダー]→[おすすめのカレンダーを検索]



 3.[日本の祝日]の[登録]をクリックする


2013年4月14日日曜日

PHPで文字列から画像のURLを抽出してIMGタグに置換する

掲示板なんかでよく使うアレですね。
$pattern = '/(ttps?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\.(jpg|gif|png)/';
preg_match_all($pattern, $body, $matches);
if(count($matches)){
    foreach($matches[0] as $i=>$url) {
        $replace = "<img src='h{$url}'>";
        $images[] = $replace;
        $body = str_replace($url, $replace, $body);
    }
}

2013年4月13日土曜日

Bootstrapでヘッダのナビゲーションを画面上部に固定するには

画面上部にナビゲーション領域を固定したり、デスクトップとスマホ用のコンテンツを一つのHTMLで表現したりするためによく使うテンプレートをここにコピペしておきます。


<!DOCTYPE html>
<html lang="ja">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8" />
    <link rel="stylesheet" href="/css/bootstrap.min.css" />
    <link rel="stylesheet" href="/css/bootstrap-responsive.min.css" />
<title>Welcome!</title>

<link rel="icon" type="image/x-icon" href="/favicon.ico" />
</head>
<body>
<div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
        <div class="container">
            <a class="btn btn-navbar pull-left" data-toggle="collapse" data-target=".nav-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            </a>
            <a class="brand" href="#">Your Brand</a>
            <div class="nav-collapse">
                <ul class="nav">
                  <li class="active"><a href="#">Home</a></li>
                </ul>
            </div><!--/.nav-collapse -->
        </div>
    </div>
</div>
<div class="container">

</div>
<script src="/app_dev.php/js/jquery.min.js"></script>
<script src="/app_dev.php/js/bootstrap.min.js"></script>
</body>
</html>

Symfony2でBootstrapを利用する場合の設定例

Symfony2でBootstrapを利用する場合に、だいぶ苦労したので忘れないうちにメモ。


まずバンドルのResources/publicの下にBootstrapのcss、img、jsファイルを配置。
   Hoge
    └─FugaBundle
        ├─Controller
        ├─DependencyInjection
        ├─Entity
        ├─Resources
        │  ├─config
        │  ├─public
        │  │  ├─css/
        │  │  │      bootstrap-responsive.css
        │  │  │      bootstrap-responsive.min.css
        │  │  │      bootstrap.css
        │  │  │      bootstrap.min.css
        │  │  │
        │  │  ├─img/
        │  │  │      glyphicons-halflings-white.png
        │  │  │      glyphicons-halflings.png
        │  │  │
        │  │  └─js/
        │  │          bootstrap.js
        │  │          bootstrap.min.js
        │  │          jquery.min.js
        │  └─views
        │      └─Matome
        └─Tests
            └─Controller

config.ymlでAsseticの設定で、対象となるBundleにHogeFugaBundleを追加する。

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: true
    bundles:        [ HogeFugaBundle ]
    #java: /usr/bin/java
    filters:
        cssrewrite: ~
        #closure:
        #    jar: %kernel.root_dir%/Resources/java/compiler.jar
        #yui_css:
        #    jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar


bootstrapのCSSとJavaScriptを読み込めるようにTwigを記述。

<html lang="jp">
<head>

{% stylesheets
    'bundles/hogefuga/css/bootstrap.min.css' filter='cssrewrite'
    'bundles/hogefuga/css/bootstrap-responsive.min.css' filter='cssrewrite' %}
    <link href="{{ asset_url }}" rel="stylesheet"></link>
{% endstylesheets %}
<title>{% block title %}Welcome!{% endblock %}</title>

{% block stylesheets %}{% endblock %}
<link href="{{ asset('favicon.ico') }}" rel="icon" type="image/x-icon"></link>
</head>

<body>
{% block body %}

<legend>Hello Bootstrap <i class="icon-heart"></i></legend>

{% endblock %}

{% javascripts
    '@HogeFugaBundle/Resources/public/js/jquery.min.js'
    '@HogeFugaBundle/Resources/public/js/bootstrap.min.js' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
{% block javascript %}
{% endblock %}
</body>
</html>




で、最後に
php app/console assets:install
php app/console assetic:dump

画像からBootstrapのCSSをカラーコーディネートしてくれるサイト

画像を投稿すると、その画像をもとにしてBootstrapのCSSをカラーコーディネートしてくれるサイト。 http://www.lavishbootstrap.com/ 自分のサイトの雰囲気にあった画像を投稿すれば、それっぽいCSSを出力してくれる。

Symfony2に関するあれこれ

Symfony2でバンドルを作成するには

バンドルを作成するにはgenerate:bundleを使用する。

最初にnamespaceだけ決めれば途中でいくつか質問されるが、デフォルトのままOKを押せばOK。

ただし、Configuration formatはymlがおすすめ。 Symfony2では何かと設定ファイルを編集することになるが、設定の仕方を調べるとほとんどYAML形式での設定方法を記述しているので、YAMLを選択すると楽になるかも。
#php app/console generate:bundle --namespace=Hoge\FugaBundle


  Welcome to the Symfony2 bundle generator



Your application code must be written in bundles. This command helps
you generate them easily.

Each bundle is hosted under a namespace (like Acme/Bundle/BlogBundle).
The namespace should begin with a "vendor" name like your company name, your
project name, or your client name, followed by one or more optional category
sub-namespaces, and it should end with the bundle name itself
(which must have Bundle as a suffix).

See http://symfony.com/doc/current/cookbook/bundles/best_practices.html#index-1 for more
details on bundle naming conventions.

Use / instead of \  for the namespace delimiter to avoid any problem.

Bundle namespace [Hoge\FugaBundle]:

In your code, a bundle is often referenced by its name. It can be the
concatenation of all namespace parts but it's really up to you to come
up with a unique name (a good practice is to start with the vendor name).
Based on the namespace, we suggest HogeFugaBundle.

Bundle name [HogeFugaBundle]:

The bundle can be generated anywhere. The suggested default directory uses
the standard conventions.

Target directory [C:/xampp/htdocs/your-project/src]:

Determine the format to use for the generated configuration.

Configuration format (yml, xml, php, or annotation) [annotation]: yml

To help you get started faster, the command can generate some
code snippets for you.

Do you want to generate the whole directory structure [no]?


  Summary before generation


You are going to generate a "Hoge\FugaBundle\e" bundle
in "C:/xampp/htdocs/your-project/src/" using the "yml" format.

Do you confirm generation [yes]?


  Bundle generation


Generating the bundle code: OK
Checking that the bundle is autoloaded: OK
Confirm automatic update of your Kernel [yes]?
Enabling the bundle inside the Kernel: OK
Confirm automatic update of the Routing [yes]?
Importing the bundle routing resource: OK


  You can now start using the generated code!

.svnフォルダをすべて削除するには

コマンドプロンプトで

for /R /D %I in (.svn) do RMDIR "%I" /S /Q