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

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

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

<br />
&lt;!DOCTYPE html&gt;<br />
&lt;html lang=&quot;ja&quot;&gt;<br />
  &lt;head&gt;<br />
    &lt;meta charset=&quot;utf-8&quot;&gt;<br />
    &lt;title&gt;HTMLの練習&lt;/title&gt;<br />
  &lt;/head&gt;<br />
  &lt;body&gt;<br />
    こんにちは<br />
  &lt;/body&gt;<br />
&lt;/html&gt;<br />

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

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

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

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

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

<br />
&lt;meta charset=&quot;utf-8&quot;&gt;<br />

この書き方では、文字コードの判定できないらしく
<br />
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;<br />

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

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

Scoutが動かない

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

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

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

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

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

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

</p>
<p>&lt;form class=&quot;form-inline&quot; role=&quot;form&quot;&gt;</p>
<p>&lt;div class=&quot;form-group&quot;&gt;<br />
    &lt;input class=&quot;form-control&quot; id=&quot;yy&quot; type=&quot;text&quot;&gt;<br />
    &lt;label for=&quot;yy&quot;&gt;年&lt;/label&gt;<br />
    &lt;button type=&quot;button&quot; class=&quot;btn btn-success&quot; id=&quot;run&quot;&gt;実行&lt;/button&gt;<br />
  &lt;/div&gt;</p>
<p>&lt;/form&gt;</p>
<p>

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

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

Enter キー押下 = Submit

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

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

<br />
$(&quot;input&quot;). keydown(function(e) {<br />
  if ((e.which &amp;&amp; e.which === 13) || (e.keyCode &amp;&amp; e.keyCode === 13)) {<br />
    return false;<br />
  } else {<br />
    return true;<br />
  }<br />
});<br />

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

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

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

数値を入力 → Enter キー押下

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

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

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

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

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

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