PHP(日本語だと上手く動きません)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
telepas

PHP(日本語だと上手く動きません)

#1

投稿記事 by telepas » 12年前

PHPでユーザ定義関数の動作を確認するためのプログラムです。
内容に日本語を含む入力をした場合、$contentに内容を取得してくれません。
例えば、「xをyに変換」ならうまくいくのですが、「あ を ★に変換」だと失敗します。
結構調べたのですが、手詰まりのようです。申し訳ないのですが、原因を教えて下さい。
よろしくお願いします。

コード:

<?php
//=================================
//●: ユーザ定義関数を使う
//=================================
//----------------------------
//外部ファイルの取り込み
//----------------------------
require_once("./5-2-2.php"); //ユーザ定義関数ファイル
//----------------------------
//初期値設定
//----------------------------
$kubun = "1";
$content="";
$from="";
$to="";
$postflg="0";
//----------------------------
//POSTされたとき
//----------------------------
if($_SERVER["REQUEST_METHOD"]=="POST"){
  $postflg="1";
  //----------------------------
  //関数テストするボタンを押す
  //----------------------------
  if(isset($_POST["submit"])){
         //↑「関数テストする」ボタンがクリックされた時、この処理を行う
  //----------------------------
  //$_POSTから値を取得
  //----------------------------
  if(isset($_POST["kubun"])){  //区分
    $kubun=$_POST["kubun"];
  }
  $content= htmlspecialchars($_POST["content"],ENT_QUOTES);//内容
  $from= htmlspecialchars($_POST["from"],ENT_QUOTES);//変換前
  $to=htmlspecialchars($_POST["to"],ENT_QUOTES);//変換後
  //----------------------------
  //関数を呼び出す
  //----------------------------
  $func ="check_" .$kubun;
  $cont =$content;
  $value =$func($cont);
  }
}
?>
<html>
<head>
<meta http-equiv="Content-type"
content ="text/html; charset=Shift-JIS">
<title>●:ユーザ定義関数を使う</title>
</head>
<body>
<h2>ユーザ定義関数テスト</h2>
<?php
//----------------------------
//送信された内容を表示
//----------------------------
if($postflg=="1"){
   echo "<b>関数処理された内容</b><br>";
   echo "<font color=\"#b2ce77\">";
   echo $msg;
   echo "</font>";
   echo "$cont<br>";
   echo "内容の長さは<b>" .$value ."</b>バイトです<br>";
}
?>
<hr>
<form action="<?=$_SERVER["PHP_SELF"]?>" method="POST" enctype="multipart/form-data">
<table border="1" width="600" cellspecing="0" cellpadding="0">
<?php
//----------------------------
//処理区分
//----------------------------
?>
<tr>
<td align"center" width="150" bgcolor="#b2ce77">処理区分</td>
<td align"left" width="450">
&nbsp;<input type="radio" name="kubun"value="1"<?if($kubun=="1"){echo "checked";}?>>URLをリンクに変換<br>
&nbsp;<input type="radio" name="kubun"value="2"<?if($kubun=="2"){echo "checked";}?>>入力内容に合わせて改行する<br>
&nbsp;<input type="radio" name="kubun"value="3"<?if($kubun=="3"){echo "checked";}?>>
<input type="text" name="from" value="<?=$from?>">を<input type="text" name="to" value="<?=$to?>">に変換<br>
&nbsp;<input type="radio" name="kubun" value="4"<?if ($kubun=="4"){echo "checked";}?>>上記のすべてを行う<br>

</td>
</tr>
<?php
//----------------------------
//内容
//----------------------------
?>
<tr>
<td align"center" width="150" bgcolor="#b2ce77">内容</td>
<td align"left" width="450">
&nbsp;<textarea name="content"cols="60"rows="10"><?=$content?></textarea>
</td>
</tr>

</table>
<br>
<input type="submit"name="submit"value="   関数テストする    ">
</form>
</body>
</html>

<?php
//=================================
//●: ユーザ定義関数を使う(関数)
//=================================
//----------------------------
//URLをリンクに変換
//----------------------------
function check_1(&$str){
 //URLをリンクタブに変更
 $check="{(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*\/:@&_-]+)}";
 $str = preg_replace($check,"<a href=\"$1$2\" target=\"_blank\">$1$2</a>",$str); 
 //メールアドレスをリンクタグに変更
 $check= "/([a-zA-Z0-9_\.-]+\@)([a-zA-Z0-9_\.-]+)([a-zA-Z]+)/";
 $str= preg_replace($check,"<a href=\"mailto:$1$2$3\">$1$2$3</a>",$str);
 global $msg;
 $msg="URlをリンクに変換しました!<br>";
 
 return strlen($str);
}
//----------------------------
//入力内容に合わせて改行する
//----------------------------
function check_2(&$str,$nagasa=0){
   $str = nl2br($str);
   global $msg;
   $msg="入力内容に合わせて改行しました!<br>";
   return strlen($str);
}
//----------------------------
//文字列を置換しました
//----------------------------
function check_3(&$str){
   $str = str_replace($GLOBALS["from"],$GLOBALS["to"],$str);
   global $msg;
   $msg= $GLOBALS["from"] ."から" .$GLOBALS["to"] ."置換しました!<br>";
   return strlen($str);
}
//----------------------------
//すべての関数を実行
//----------------------------
function check_4(&$str){
   check_1($str);
   check_2($str);
   check_3($str);
   global $msg;
   $msg= "すべての関数チェックを行いました♪<br>";
   return strlen($str);
}
?>

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: PHP(日本語だと上手く動きません)

#2

投稿記事 by h2so5 » 12年前

失敗する状況が再現できる最小限のコードを提示してください。
どの部分が問題になっているのか分かりません。

たかぎ
記事: 328
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: PHP(日本語だと上手く動きません)

#3

投稿記事 by たかぎ » 12年前

まともに見ていませんが、普通に考えて真っ先に疑うべきなのは、エンコーディングが合っていないということでは?

     

Re: PHP(日本語だと上手く動きません)

#4

投稿記事 by       » 12年前

名前を付けて保存→UTF8

閉鎖

“C言語何でも質問掲示板” へ戻る