この章では標準ライブラリ関数について説明します。
C言語には多くの標準ライブラリ関数があります。
標準ライブラリとは関数などが定義されているファイルです。
例えば文字列の長さを計る関数や文字列を比較する関数などがあります。
今回はその一部を紹介します。 getchar関数はキーボードから1文字入力させる関数です。
入力文字を入れる変数はint型で宣言をします。
この例(isalnum)の結果は以下の通りです。 この例(isalpha)の結果は以下の通りです。 この例ではfor文の条件式がになるまで大文字を小文字に変換します。
この例(tolower)の結果は以下の通りです。 この例ではfor文の条件式がになるまで大文字を小文字に変換します。
この例(toupper)の結果は以下の通りです。 指定された値を切り上げる関数です(小数点以下を切り上げて整数を取り出します)。
元の数字よりも大きい数を戻り値として返します。この例(ceil)の結果は以下の通りです。 指定された値を小数点以下で切り捨てる関数(端数を切り捨てる)です。
元の数字よりも小さい数を返り値として返します。
先頭でを宣言してください。 この例(floor)の結果は以下の通りです。この例(strlen)の結果は以下の通りです。 この例(strcmp)の結果は以下の通りです。
タグ: strlen
フォームからの情報を受け取ろう
この章ではフォームについて説明します。
会員登録で名前、住所などを入力したことがあると思いますが、これがフォームです。
フォーム自体はHTMLで作るのですが、その入力した内容をサーバーに送るにはPHPを使います。
以下のプログラムはHTMLで作成しています。
ファイル名はです。 このHTMLファイルを画面に表示させると以下のようになります。
ここから「名前」「メールアドレス」などの情報を送信して、PHPプログラムで処理するというプログラムを作成します。 HTMLの説明は後ほどしますが、ここでは送信方式について説明します。 =>action属性の値にはデータの送り先を指定します。
この例で説明しますとからにデータを送ることを意味します。
method属性にはサーバへの送信方法を指定します。
フォームからサーバへの送信方法にはPOSTとGETの2つがあります。POSTを指定した場合、フォームに入力したデータはHTTPプロトコル(後ほど補足で説明します)という通信の機能によりリクエストボディつまり本体部分に入力されてサーバに送られますが、送る文字数には制限はありません。
POSTの場合は入力したデータの他にもWebブラウザの種類やバージョンなどの情報、どの言語を使っているか、どのサイトから訪問してきたかなどの情報も一緒に送信します。
GETはURLの後ろにを付けて送ります。
複数の情報を付加する場合にはを使います。
つまりが1つの情報になりますので、複数の情報を付け加えたい場合はで連結します。
例えばのように連結します。
つまり、フォームの送信データがURLとして渡されると言うことです。
そのため送信する情報には制限が有り、最大で約2000文字位です。
例を示すとヤフーなどで検索しているとのようにの後ろにが連なっているURLを見たことがあると思いますが、これはGETでサーバにデータを送っているのです。
そして、サーバはその検索語を元に検索結果を返しています。
get方式でデータを送るときにはmethodの値をgetに変更します。 補足ですがHTTPプロトコルについて説明します。
HTTPプロトコルとはユーザーのコンピューターとサーバの間のやり取りに関する通信規約であり、ユーザーのブラウザからリクエストを発信し、その結果をサーバがレスポンスするとその処理が完結すると言う単純な構造から出来ています。 属性にtextを入れると1行のテキスト入力欄を作成します。
size属性はテキストボックスの横幅で、valueは入力欄の初期値です。
と入力すれば最初から入力欄に「猫」が入力された状態になります。name 属性はtextに名前を付けるためにあります。
これは1行のテキスト入力欄です。
name 属性はtextに名前を付けるためにあります。 rowsは入力欄の行数を入力し、この例では5行分になります。
colsは1行に入力できる文字数です。 type属性にradioを入れるとラジオボタンを作ることが出来ます。
name属性はradioに名前を付けるためにあります。 <select>はセレクトボックスを作成します。
name属性はセレクトボックスに名前を付けるためにあります。 type属性にcheckboxを入れますとチェックボックスを作ることが出来ます。
name属性はチェックボックスに名前を付けるためにあります。 属性に「submit」を入れると送信ボタンを作ることが出来ます。
value属性にはsubmitボタンに付ける名前を書きます。
次は送信先のPHPの部分について説明します。
以下のファイルはです。Lesson21.phpにLesson21.htmlの中のフォームデータを送る方法について説明します。
ユーザーが送信ボタンを押すとmthodに指定した方式で送信されます。
post方式は大量のデータを送るときに便利です。
を使うことで、POSTメソッドで送信されたHTMLのデータを取得できます。
については後ほど説明します。
例えばpost方式で送信した以下のフォームのメールアドレスのデータを得たいのであればname属性の値をキーとしてと、記述してデータを受け取ります。 GRTで送信された場合にはで受け取ります。
getの場合はフォームのmethodの部分を以下の通りgetと書きます。 そして$_GET変数を使うことで、GETメソッドで送信されたフォームのデータを取得できます。
では具体的にとについて説明します。
フォームから送信されたデータを受け取るには送信方法がPOSTであればGETであればでで受け取ります。
まずはPOSTから説明します。
を押しますとデータが送信されますが、そのデータを受け取るには以下の構文で受け取ります。 この構文を見ていただくと分かりますがは連想配列です。
フォームで入力された氏名を受け取りたいのであれば
と記述してデータを受け取ります。
name属性の値を連想配列のキーに入れます。 フォームのメールアドレスを受け取りたいのであればと記述してデータを受け取ります。
では実際、PHP側でどのようにデータを受け取っているかを見てみましょう。にはフォームの名前欄に入力された情報が連想配列の形で代入されます。
例えば と、名前を入力して を押しますとには「近藤雅夫」と言うデータが代入されます。
つまりと、同じことを意味します。
ですので、
結果はが表示されます。
「htmlspecial」はユーザー定義関数ですが、これについては後ほど説明します。
次にempty関数について説明します。
通常、フォームからデータを送った時、そのデータが間違っていないのかをチェックする必要があります。
例えば名前が入力しているかどうかをチェックして、入力していないのならば入力するようにメッセージを表示することが必要になります。
会員登録で名前の入力が間違っていて、もう1度入力するようにメッセージを表示された経験が1度はあると思います。
empty関数は引数に値が入っているかどうかを確認する関数であり、〇数字の0
〇文字列の 〇何も入ってないカラ文字、
〇null
の場合はTRUEで、それ以外はFALSEを返します。
nullとは何も変数に入ってない状態をさします。
ですのでに仮に何もデータが入っていないのならばelse以下のが出力されます。
似たような関数としてisset関数があります。
この関数は変数がセットされているのかを調べる関数です。
変数 が NULL 以外であれば TRUE、そうでなければ FALSE を返します。
以下のようにissetは値がカラでもTRUEを返すので、送信データがカラでもそのまま警告もなく進んでしまいます。 結果は以下の通りです。
「値が入っている」
カラではなくで本当に値が入っているか確認するにはempty関数かstrlen関数を使いましょう。
strlen関数については説明しましたが、もう一度復習しましょう。 strlen関数は文字列の長さを測る関数です。
引数に文字列を設定すると長さを返してくれます。
長さとはバイト数のことです。
半角英数字は1文字1バイトとして数えています。
おおよそ日本語のようなマルチバイト文字は1文字2バイトですが、文字コードがUTF-8では概ね3文字バイトで表されます。 結果は以下の通りです。
21バイト
13バイト
ではstrlenをif文で使ってみましょう。
結果は以下の通りです。
値が入っている
値が入ってない
値が入っている
strlenをこのように使うことによってissetと違ってカラ文字には値が入っていないことを確認できます。
これでフォームの名前や住所などがカラの場合にはメッセージを表示させることができます。
ここで補足としてis_numeric関数について説明します。 この関数は変数が数値であるかどうかを調べることが出来ます。
変数が数値、または数値文字列ならばTRUEを、そうでなければFALSEを返します。
数値文字列とは造語ですが、例えばのように数値をダブルクォートやシングルクォートで囲んでも数値とみなされます。
このis_numeric関数はフォームの入力値を数字に設定しているのに文字を送ってきてしまう場合にチェックすることが出来ます。
結果は以下の通りです。
数字です
数字以外が入っています
数字です
次はチェックボックスのデータをPHP側に渡す方法について説明します。 チェックボックスでは複数の箇所に印を付けることが出来ますが、印をつけた部分をすべてPHPプログラムに送りたい場合はどうするかと言いますと、のようにname属性の値の部分にを付けてください。
これを付けることにより、配列としてPHP側にデータを渡すことができます。
にはチェックボックスでチェックしたデータが配列の形式で入っていますのでforeachですべてを取り出すことが出来ます。 次に以下のユーザー定義関数についての説明をします。 これはhtmlspecialと言うユーザー定義関数ですが、この関数を説明するより先にhtmlspecialchars関数について説明します。
htmlspecialhars関数はフォームから入力した文字や数値を画面に表示するときには必ずhtmlspecialchars関数を使います。
これは外部からの悪質なサイトへの攻撃を防ぐことに有益な関数です。 htmlspecialchars関数の機能は指定した文字列を変換スタイル、文字コードに従ってHTMLでの特別な意味を持った文字を表示可能な形式に変えます。
具体的には
〇 ‘&’ (アンパサンド) はに変換されます。
〇「変換スタイル」にが設定されている場合、ダブルクォートはになり、シングルクォートはになります。
〇 ‘>’ (大なり) はに変換されます。
「変換スタイル」はデフォルトではが設定されています。
はダブルクォートは変換されますが、シングルクォートは変換されません。
はシングルクォートもに変換してくれますので、変換スタイルはに設定してください。
構文の「文字コード 」は変換をどの文字コードで行うかを指定します。
この例ではを使用しています。
では説明をしていきます。
ユーザーが入力したデータがに入っていますので、このデータをhtmlspecial 関数を呼び出して、htmlspecialchars関数で処理しています。 では次にユーザー定義関数の中身について説明します。
このユーザー定義関数はよく使う関数なので覚えておいてください。 is_array関数は引数が配列の場合にTRUE、配列ではない時にFALSEになる関数です。
引数が配列ではない時に が実行されますので、や
などはここで処理されます。
問題は引数が配列の時です。
配列の場合はが実行されますが、は指定した配列の要素のすべてを指定した関数に渡すという機能を持った関数です。 array_map関数は渡されてきたデータが配列の場合に配列の要素を1つずつhtmlspecial関数の引数$strに渡すので、その要素は最終的には以下の箇所で処理されます。 図式にすると以下の順番で進みます。
以下の過程を配列の数だけ繰り返します。POST方式でのデータの送信方法については説明したので、今度はGET方式でデータを送ってみましょう。
以下のファイル名はです。
Lesson21.htmlから以下のにGET方式で送ります。 GETで送信された場合はURLの1番後ろにを付けて送ります。
複数ある場合は とをで連結できます。
しかし、文字数に制限があり(2000文字くらい)、少ないデータを送るのに適しています。
以下の形式でGETのデータを受け取ります。 例えば次の箇所でGETのデータを受け取っています。 データをからにGETで送ると以下のようにURLに埋め込んで送ってくれます。
つまり、name 属性の値と入力された値がで連結されます。
渡すデータが複数ある場合には各データをで連結します。
例えば以下のように送信されます。 上のURLの中にのような箇所がありますが、これはブラウザがURLエンコードを行ってくれているからです。
日本語などはURLとして認められていないので、通常はそのままでは送ることはできませんが、URLエンコードを行うとURLとして認められている文字に変換して送ってくれます。
このエンコードの作業はフォームから送る場合には自動で変換してくれます。
では例を見てみましょう。
フォームで送る場合には勝手にブラウザがURLエンコードを行ってくれるのですが、リンクに埋め込んでデータを送る場合には自身でURLエンコード処理を行わなくてはいけません。
下のファイル名はです。 Lesson27.phpから下のにデータを送ります。
Lesson27.phpの中にと言う箇所がありますが、urlencode関数は日本語などURLとして認められていない文字を規定に則って変換して送ってくれます。
urlencode関数を記述しませんと文字化けしますので気を付けてください。
$_GETのキーには以下の「name2」を入れます。 以下のリンクをクリックしますと「近藤」と出力されます。
文字列に関する関数を知ろう
この章では文字列に関する関数について説明します。
配列の関数に続いて今度は文字列に関する関数について説明します。str_replace関数は元の文字列に関して、置換対象の文字列を置換後の文字列で置き換えます。
では例をみてみましょう。 元の文字列のカレーを牛丼に置換しています。
結果はです。
今度は元の文字列に配列を使った例を説明します。 配列の中のaをzに置換しています。
結果は以下の通りです。
z
b
c
mb_substr関数は文字列の一部分を取り出す関数です。
では例をみてみましょう。
「取り出し開始位置」は前からと数えますので、1番前から3個取り出して$kazu2に代入しています。
結果は 「123」 です。
次の例をみてみましょう。 取り出す文字数を省略すると取り出し開始位置からすべての文字列を取り出します。
取り出す文字数、文字コードは省略できます。
結果は 「5678」 です。
str_repeat関数は文字列を指定した回数だけ繰り返す関数です。
では例をみてみましょう。 繰り返す文字列にaを, 繰り返す回数に5を指定しているので、結果はになります。
explode関数は対象の文字列を区切り文字で区切った文字列を配列として返します。
では例をみてみましょう。 対象文字列$strをで分割したものを配列$arrに入れています。
配列なのでforeachで取り出すことが出来ます。
区切り文字は文字列であればでもでも何でも使うことが出来ます。
結果は「abcde」です。
implode関数は配列要素を区切り文字列により連結する関数です。
各配列の要素をでつなげているので、結果はです。
strlen関数は文字列の長さを測る関数です。
長さとはバイト数のことです。
半角英数字は1文字1バイトとして数えています。
おおよそ日本語のようなマルチバイト文字は1文字2バイトですが、文字コードがUTF-8では概ね3バイトで表されます。
つまり、バイト数は、文字コードに依存するので複雑です。
そのような理由から、日本語の文字数を数えたい場合は次に説明しますを使いましょう。
結果は以下の通りです。
21バイト
13バイト
mb_strlen関数は日本語などのマルチバイト文字列の文字数を数える関数です。
strlen関数はバイト数を習得する関数です。
文字エンコーディングは省略できます。
文字エンコーディングとはどの文字コードでこの関数を実行するのかを指定します。
では例をみてみましょう。 結果は「10個」 です。
mb_convert_kana関数は全角英数字を半角に変えたり、半角英数字を全角に変えたり、かな文字を全角カナや半角カナに変換することができます。
エンコーディングは省略できます。 では例をみてみましょう。 半角英数字を全角に変換しますので変換オプションはAを使います。
結果は以下の通りです。
「akasaka123」
次の例をみてみましょう。
では説明を始めます。
はフェラーリという全角カタカナを半角カタカナに変換してますので、結果はです。
はランボルギーニという全角カタカナを全角ひらがなに変換してますので、結果はです。
はふらのという全角ひらがなを半角カタカナに変換してますので、結果はです。