PHP DOM操作における文字化け

PHPで、次のHTMLを読み込んで、title の
テキストノードを取得し表示するものとします。

(1) HTMLコード(sample.html)

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>HTMLの練習</title>
  </head>
  <body>
    こんにちは
  </body>
</html>

(2) PHPコード(sample.php)

$sou = file_get_contents(./sample.html);
$dom = new DOMDocument();
@$dom->loadHTML($sou);
// <title>タグの値を取得する
$title = $dom->getElementsByTagName('title')->item(0)->nodeValue;
print "$title\n";

プログラムのソースは共に utf-8 で格納しており、php.ini の設定も utf-8 にしている
ので問題ないはずなんですが・・・・

なんと「HTMLの練習」が正しく表示されない!
文字化けします。

その原因は?
私にゃ分からないので、Gooleさんにお願いしてみると、
素晴らしいご託宣がここにありました。
かいつまんで言うと、

<meta charset="utf-8">

この書き方では、文字コードの判定できないらしく

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

のように書かなければならないとのことである。

お陰様で問題が解決しました。
が、他にも同じような問題があったような???
HTMLのバージョンがアップしても、PHPが追随してないようなイヤ~な感じがします。

Scoutが動かない

標記のソフトをインスト-ルしようとするとエラーが発生する。
インストールに失敗したのかと思いきや、java.exe の位置が探せずに起動でき
ことが原因でした。
< /gecko >に対策が書いてあります。
大変お世話になり感謝申し上げます。

少々手間取った点をメモします。
(1) インストール(解凍したものをコピーしただけのよう見えますが)先の、
C:\Program Files (x86)\Scout\javascripts\app\フォルダ内にある process_interaction.js を開きます。
(2) 秀丸では、更新不可のメッセージが出るので、一旦別フォルダ(デスクトップなど)へコピーしてから開いた方が良いでしょう。
(3) < /gecko >さんのページでは95行目とありましたが、最新のものでは108行目を変更します。

function javaDir() {
  if(air.Capabilities.os.match(/Windows/)) {
    path = air.File.applicationDirectory.resolvePath("C:\\Program Files\\Java\\jre1.8.0_77\\bin\\java.exe");
    // (以下略)

以上です。
jreにバージョンが付いているけど大丈夫なのかな?
自分の環境変数が不安になってしまう・・・。
(追)
環境変数:C:\ProgramData\Oracle\Java\javapath
このフォルダ内に、java.exe へのシンボリックリンクが張られているので
v-up 時には、このリンクを張り替えているようですので心配は無用でした。

EnterキーによりSubmitされるのを防ぐ方法

Bootstrapを使用して、次のような簡単なフォームを作成した。


<form class="form-inline" role="form">

<div class="form-group">
    <input class="form-control" id="yy" type="text">
    <label for="yy">年</label>
    <button type="button" class="btn btn-success" id="run">実行</button>
  </div>

</form>

ここで想定外の問題発生。
入力フィールドに、数値(年)を入力して Enter キーを押すと
何事も起きていないのに、入力値がスーッと消えてしまうのです。

先ずは。Bootstrap を疑ってググって色々調べてみると、Bootstrapとは無関係
で、原因はブラウザのデフォルト動作で

Enter キー押下 = Submit

になり、送信データを受信するプログラムがないためらしい。

受信用のプログラムがないので、対策として、以下のように Enter キーを無効に
することで暫定対策。

$("input"). keydown(function(e) {
  if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) {
    return false;
  } else {
    return true;
  }
});

これだと、Enter キーを無効にはできるが、

数値を入力 → 右手をマウスに持ち換え → ボタンをクリック

との一連の動作が、如何にも面倒。

数値を入力 → Enter キー押下

とできれば、入力がかなり改善される。
と言うことで、Enter キーを無効にすることをやめて
次のようなコードに変更。

$("#yy").keydown(function(e){
  if(e.keyCode=='13'){
    var year = $("#yy").val();
    dispData(year);  // データ表示
  }
});

ここで、またまた問題が・・・・
データは、一瞬表示されるが直ぐに消えてしまうような現象が発生。

これは、「Enter キー」のSubmit 機能が活きているため、データを
一旦表示した後に、フォームが送信されてしまうことが原因。
(この原因を掴むのに、随分苦労しました。)

送信機能を無効にするため、最後に、false を返す一文を
するだけで、上の問題が解決できました。

$("#yy").keydown(function(e){
  if(e.keyCode=='13'){
    var year = $("#yy").val();
    dispData(year);  // データ表示
    return false;    // Submitを無効に
  }
});