質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

5441閲覧

なぜPHPのpreg_match関数はutf-8対応にしなければならないのか

yukiriru

総合スコア31

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2016/03/10 02:50

なぜPHPのpreg_match関数はutf-8対応にしなければならないのでしょうか。

下記のひらがなを含むという正規表現に漢字が許可されてしまいます。

if (preg_match('/[あ-ん]/, '関数') { return false; } //false

そこで、utf-8にすると漢字は許可されないです。

if (preg_match('/[あ-ん]/u, '関数') { return false; }

なぜでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

PCREの正規表現でUTF-8モードを使わない場合、UTF-8の文字は1バイトごとに認識されます。UTF-8で「あ」は0xe3 0x81 0x82、「ん」は0xe3 0x82 0x93なので、[あ-ん]は、「0xe3、0x81、0x82~0xe3まで、0x82、0x93のうちどれかのバイト」という意味になってしまいます。漢字でもこれらのバイトを使うことはよくあるので、ほぼヒットしてしまいます。

なお、[あ-ん]だとがはみ出してしまいます。とりあえずは[ぁ-ん]とすればある程度はカバーできますが、別な手段をとったほうがいいかもしれません。

投稿2016/03/10 02:58

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukiriru

2016/03/10 03:47

ありがとうございます!勉強になります!!!
guest

0

経緯だけすこし、

もともと、PHPでは、日本語の検索がつかえませんでした、
しかし UTF8が使えるようになって、ようやく対応できました。

それまで、PHP4?の時代までは、日本人がPHPの関数を作成していてそれを、拡張関数として
使えていました。

投稿2016/03/10 02:58

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukiriru

2016/03/10 03:48

なるほど。勉強しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問