新しいフォルダー(1)

メモです。よろしくおねがいします。

[PHP] 終了タグ

PHPの終了タグに関するメモ.

終了タグ

PHPの処理は開始タグ(<?php)から終了タグ(?>)の中に記述するが, PHPのコードのみからなるファイルでは終了タグを記述しない方が良い.

これは, ファイルの最後に余計な改行・空白が含まれている場合に表示や動作に問題を引き起こす可能性を排除するためである.

Before:

<?php
// 処理
?>

After:

<?php
// 処理

つけなければならない例:

<h1>見出し</h1>
<p><?php // 処理 ?></p>

[文字コード] UnicodeとUTF-Xの違い

UnicodeUTF-8, UTF-16, UTF-32の違いに関するメモ.

 

Unicode

Unicode文字集合のこと.

1つひとつの文字に符号位置と呼ばれる整数値をつけて管理している.

 

UTF-X

UTF-8, UTF-16, UTF-32などはエンコーディング方式と呼ばれるもので, 符号位置の整数値をコンピュータが使用できるようにバイト列に変換する.

 

検証

Python3によるUnicodeでの名前, 符号位置, 各エンコーディング方式でのバイト列の出力.

import unicodedata
import binascii

# 名前
print('名前: ' + unicodedata.name('鬱'))

# 符号位置
print('符号位置: ' + str(ord('鬱')))

# UTF-8(16進数表記)
print('UTF-8: ' + str(binascii.hexlify('鬱'.encode('UTF-8'))))

# UTF-16(16進数表記)
print('UTF-16: ' + str(binascii.hexlify('鬱'.encode('UTF-16'))))

# UTF-16LE(16進数表記)
print('UTF-16LE: ' + str(binascii.hexlify('鬱'.encode('UTF-16LE'))))

# UTF-16BE(16進数表記)
print('UTF-16BE: ' + str(binascii.hexlify('鬱'.encode('UTF-16BE'))))

# UTF-32(16進数表記)
print('UTF-32: ' + str(binascii.hexlify('鬱'.encode('UTF-32'))))

# UTF-32LE(16進数表記)
print('UTF-32LE: ' + str(binascii.hexlify('鬱'.encode('UTF-32LE'))))

# UTF-32BE(16進数表記)
print('UTF-32BE: ' + str(binascii.hexlify('鬱'.encode('UTF-32BE'))))

実行結果:

名前: CJK UNIFIED IDEOGRAPH-9B31
符号位置: 39729
UTF-8: b'e9acb1'
UTF-16: b'fffe319b'
UTF-16LE: b'319b'
UTF-16BE: b'9b31'
UTF-32: b'fffe0000319b0000'
UTF-32LE: b'319b0000'
UTF-32BE: b'00009b31'

[文字コード] BOM

BOMについてのメモ.

BOM

BOM(Byte Order Mark)とは, Unicodeなどの16ビット幅のエンコーディング方式において, バイトオーダーを指定するためにファイルの先頭に挿入される16ビットの値.

UTF-16などのエンコーディング方式では, ビット列の並びとしてリトルエンディアンとビッグエンディアンの両方を許容しているため, 誤ったエンディアンでデータを読み込むと判読できなくなる.

そのため, ファイルの先頭にあるBOMを読み込み, そのデータがどちらのエンディアンで作成されたのかを判別してから残りを読み込む.

BOMは0xFEFFという値で, これを誤ったエンディアンで読み込むと0xFFFEとなる.

また, UTF-8エンコーディングされたデータはエンディアンに関わらず同じデータになるためBOMは必要ないが, データがUTF-8エンコーディングされていることを明示的に表すためにBOMを付加することが許容されている.

UTF-8でBOMがあることによる被害例

UTF-8でBOMがないことによる被害例

[文字コード] バイトオーダー

ビッグエンディアンとリトルエンディアンの違いに関するメモ.

バイトオーダー

バイトオーダー(エンディアン)とは, 2バイト以上で構成されるデータをメモリ上に展開したりどこかへ転送する場合のデータの順序のこと.

バイトオーダーにはビッグエンディアンとリトルエンディアンの主に2種類が存在する.

トルエンディアン

最下位ビットの属するバイトを低位のアドレスへ格納する方式.

バイナリダンプすると順序が逆になって出力されるのが特徴.

ビッグエンディアン

最上位ビット除くするバイトを低位のアドレスへ格納する方式.

バイナリダンプするとそのまま読めるのが特徴.

[PHP] シングルクォーテーションとダブルクォーテーションの違い

PHPのシングルクォーテーションとダブルクォーテーションの違いに関するメモ.

シングルクォーテーション

文字列中の変数を値に置換しない.

<?php
$var = 'pen';
echo 'This is a $var.';

実行結果:

This is a $var.

ダブルクォーテーション

文字列中の変数を値に置換する.

<?php
$var = 'pen';
echo "This is a $var.";
This is a pen.

ダブルクォーテーションの方が高機能な処理を行うため, シングルクォーテーションの方が処理が速い.

そのため, 変数を値に置換する必要の無い場合は基本的にシングルクォーテーションを使って記述する.