スポンサーサイト

一定期間更新がないため広告を表示しています

at , スポンサードリンク, -

-, -, - -

php 機種依存文字チェック

PHPプログラミングで、メール送信するときに一番やっかいなのが、
機種依存文字を送らないようにする事だと思います。
ネットで色々調べたけど、これだっ!ていう物がなかなかなくてどうしようか考えました。
いったん違い文字コードにして元に戻せば良いと書いてあるサイトが有り、
その言葉を元につくってみました。
ソースはUTF-8N形式でのサンプルになります。

関数のパラメータは、文字列です。
受け取った文字列をUTF-8からSJISに変換してさらにUTF-8に変換しています。
これにより、変換できない文字(機種依存文字)が?に置き換わる機能を利用して
一文字ずつチェックをします。
機種依存文字が入力されてれば、その文字全てを返す関数になっていますので、
エラーメッセージを出すのに活用出来るかと思います。

function check_machine_dependent_character($str) {
 $chk = mb_convert_encoding(mb_convert_encoding($str,'SJIS','UTF-8'),'UTF-8','SJIS');
 $rtn = '';
 for ($i=0; $i<mb_strlen($str,'UTF-8'); $i++){
  $str1 = mb_substr($str, $i, 1,'UTF-8');
  $chk1 = mb_substr($chk, $i, 1,'UTF-8');
  if($str1 <> $chk1) {
   $rtn = $rtn . $str1 . ' ';
  }
 }
 return $rtn;
}

単純に作ってみましたので、あくまで参考程度に。
 

at 19:57, tom7650, php

comments(0), trackbacks(0), - -

XML サーバーへのパラメータ日本語対策

PHPでXMLサーバーにリクエストを送り結果にてHTMLを生成するプログラムが最近多くなってきてるようですが、リクエストパラメータに日本語を扱う場合問題が多いです。

<?php
  $parm = "テスト";
  $url = "http://xmlserver/testxml.php?parm=" .  $parm ;
  $data = @simplexml_load_file($url);
?>

この場合、$parmの文字によっては正しく送る事が出来ません。

日本語をパラメータで送る場合は、 urlencode() の関数を使う事により解決します。

<?php
  $parm = "テスト";
  $url = "http://xmlserver/testxml.php?parm=" .  urlencode($parm) ;
  $data = @simplexml_load_file($url);
?>

これで解決!と思いきや問題が・・・・・
エンコードしても受け側が認識できていない!

原因は、PHPソースの文字形式に問題がありました。
urlencode関数は、PHPソースの文字コード形式によりエンコードされます。
PHPソースがSJISの場合SJISでエンコードされるってことです。
サーバーがUTF-8Nで受ける場合は、送り側ソースもUTF-8N形式でエンコードしないと駄目でした。

もし、ソース中に日本語がない場合、文字コードが判断できませんので、コメント行で日本語を入れておきましょう!これで、文字コードが判断されるようです。

文字コードが色々あるので色々起こりますね。

at 15:29, tom7650, php

comments(0), trackbacks(0), - -

PHP 切り上げ、切り捨て、四捨五入

割り算の計算する時によく使う関数で、切り上げ、切り捨て、四捨五入がありますが、
言語によって違い使いたい時に思い出せない事があります。ので、メモ書きをしておこうと思います。

ceil( m/n )         // 切り上げ
floor( m/n )       // 切捨て
round( m/n )    // 四捨五入

例)
  $A = ceil($m / $n);
  $A = floor($m / $n);
  $A = round($m / $n);
 

at 15:17, tom7650, php

comments(0), trackbacks(0), - -

Fatal error: Call to a member function execute() on a non-object in ******

php でプログラム作っていて、エラーになりますが、
「Fatal error: Call to a member function execute() on a non-object in ******」
このエラーって意外と初心者はどこが悪いのか分かりません。

  $dbh = new PDO('sqlite:データベース名','', '');
  $sqlcmd = 'SELECT * FROM テーブル名  where 条件式';
  $stmt = $dbh->prepare($sqlcmd);
  $stmt->execute();      ←ここの行で上記エラーメッセージが出ます

初心者の方はこのエラーどう考えるでしょう?
オブジェクトがない?オブジェクトがあるけど文法間違い?・・・
何が悪いの?
このようなパターンのエラーは、大概SQL文の間違いがあるのが原因です。
SQL文をきっちりチェックすれば治ります。
文字列結合なのでわかりにくい場合は、var_dump関数を使って確認しましょう!

  $sqlcmd = 'SELECT * FROM テーブル名  where 条件式';
 $var_dump($sqlcmd);   ←これを追加すると変数の中身がみれます。確認終わったら消しておきましょう!という事をメモ書きをしておきます。

at 06:49, tom7650, php

comments(0), trackbacks(0), - -

もしもAPIでエラーになった!

2日ほど前からもしもapiでエラーになるようになりました。
ヘビーな物で、一日1回更新用のプログラムなんですが、

Warning: simplexml_load_file(http://api.moshimo.com/×××××××××) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /home/××× ×××.php on line 9
のエラーが発生するようになりました。
それも、中盤あたりを毎回違うところでです。
原因は、分かりませんが、ヘビーなの作ったら駄目なんでしょうね。
という事で、とりあえず、エラーメッセージをブラウザーに表示しない対策をしないと駄目なので、
色々調べたところ、この方法が一番手っ取り早いのかな?
ということで、その方法を書いておきます。

$xml = simplexml_load_file(http://api.moshimo.com/×××××××××)

ですが、

$xml = @simplexml_load_file(http://api.moshimo.com/×××××××××)

と関数のまえに@マークを付けるだけです。
この関数のエラーメッセージが表示されなくなります。
これは簡単に対策出来るようになりました。
でも、肝心な、ベビーな処理を改めないと駄目ですね。
何か良いアイデアないか考えようと思っています。

at 21:32, tom7650, php

comments(1), trackbacks(0), - -

api使う上での動作確認

申請の返事がまだ来ていないので、
もしもapiを使う前提でphpでプログラム作ろうと考えている動作を確認していました。
今借りているレンタルサーバーでは、問題なく動きましたので、後はプログラムを作りだけです。
html、cssのベースを作ったので、phpで作っていこうと思っています。


at 19:37, tom7650, php

comments(0), trackbacks(0), - -