DreamHostでmysqlの文字化け対策

DreamHost にてデータベースの情報を mysql で取り出すと日本語が????と文字化けする。

文字化け対策としてデータベース接続時に文字コードを指定する。

----------------------------------------------------
$link = mysql_connect($hostname,$username,$password);

mysql_select_db($database) or die("Unable to select database");

mysql_query('SET NAMES utf8', $link); ←これを追記
//mysql_set_charset('utf8'); ←もしくはこれ
----------------------------------------------------

SET NAMES には脆弱性あるので mysql_set_charset を使うのがいいよう。

もしくは my.conf で文字コードを指定する。

【PHP】DreamHostでmysqlの接続

DreamHostでPHPを使ってmysqlデータベースへ接続する方法のメモ。

//mysqlの接続
///////////////////////////////////////////////
$hostname = ""; // mysql.example.com (「mysql.」 + 「独自ドメイン」)
$username = ""; // データベースを設定したときに決めたユーザ名
$password = ""; // データベースを設定したときに決めたパスワード
$database = ""; // 接続するデータベース名

$link = mysql_connect($hostname,$username,$password);
mysql_select_db($database) or die("Unable to select database");
mysql_query('SET NAMES utf8', $link); //←文字化け対策
//mysql_set_charset('utf8'); //←もしくはこれ
///////////////////////////////////////////////

//出力の例
///////////////////////////////////////////////
$sql = "SELECT * FROM table_name";

$result = mysql_query($sql,$link) or die("Unable to select: ".mysql_error());

while($datas = mysql_fetch_assoc($result)) {

echo $datas['column_name'] . "
";

}
///////////////////////////////////////////////

//mysqlの切断
///////////////////////////////////////////////
mysql_close($link);
///////////////////////////////////////////////

DreamHostのmysqlのdatabaseへのアクセスの仕方

ブラウザからアクセスしてphpmyadminへ
--------------------------------------

http://mysql.独自ドメイン/

(http://mysql.example.com/)
--------------------------------------

またはターミナルでサーバーにアクセスしてコマンドライン
--------------------------------------
$ mysql -u データベースユーザー名 -p -h データベースホスト名
--------------------------------------

【css】white-space: nowrapがずっと改行しない

white-space: nowrap;が改行してほしいところでも改行しない現象に遭遇。

このhtmlコードで
-----------------------------------------------
<table>
<tr>
<td>
<span style="white-space: nowrap;">改行させない1</span>
<span style="white-space: nowrap;">改行させない2</span>
<span style="white-space: nowrap;">改行させない3</span>
</td>
</tr>
</table>
-----------------------------------------------

テーブルの幅があるときこうなっているものを
-----------------------------------------------
改行させない1改行させない2改行させない3
-----------------------------------------------

テーブルの幅がないスマホなどで見たときこう表示させたい
-----------------------------------------------
改行させない1
改行させない2
改行させない3
-----------------------------------------------

しかしこうなる。改行しない。画面の外に文字の一部が出てしまう。
-----------------------------------------------
改行させない1改行させない2改行させない3
-----------------------------------------------

原因は htmlコード自体の改行を行っていなかったため。
実際の htmlコードはこうだった。
-----------------------------------------------
<table>
<tr>
<td>
<span style="white-space: nowrap;">改行させない1</span><span style="white-space: nowrap;">改行させない2</span><span style="white-space: nowrap;">改行させない3</span>
</td>
</tr>
</table>
-----------------------------------------------

<span>~</span>の境目が改行されていなかったため。
次のようにしたら希望通りに改行できた。
-----------------------------------------------
<table>
<tr>
<td>
<span style="white-space: nowrap;">改行させない1</span>(ここ改行)
<span style="white-space: nowrap;">改行させない2</span>(ここ改行)
<span style="white-space: nowrap;">改行させない3</span>(ここ改行)
</td>
</tr>
</table>
-----------------------------------------------

white-space: nowrap;をうまく扱うときは、空白文字を必要な場所にきちんと入れること。

【jquery】masonryがスマホ画面で横並びしない場合の解決方法

javascript プラグインの masonry を使ったページでウインドウが横並びしない場合の対処法。

対処法 → columnWidth オプションを設定する。

------------------------------------------------------
<div class="js-masonry">

↓↓↓↓

<div class="js-masonry"
data-masonry-options='{
"columnWidth": 50,
"itemSelector": ".item",
"transitionDuration": "1.5s"
}'
>
------------------------------------------------------

columnWidth は、ボックスの横幅を指定するオプション。
masonry のデフォルトでは、スマホの画面幅にに二つ以上ウインドウを並べることはサイズ的に無理らしい。
そこで、50pxとかボックスのサイズを小さく指定する必要がある。

jqueryで文字列を置換するreplace関数【javascript】

jquery で文字列を置換するには、javascript のreplace関数を使う。
--------------------------------------------
new_text = text.replace(/探す文字列/g, '置換後の文字列');
--------------------------------------------

第一引数は正規表現で。g 修飾子はマッチするものすべてを見つける。

【jquery】配列内の重複を削除する【javascript】

jquery に unique() という関数があるが、これはDOM要素の配列の重複を削除するもの。文字列が入った配列の重複を解消するものでない。

jquery(javascript)で配列の内容をユニークにするには少し手間を掛ける必要がある。

//配列内の文字列の重複を削除する自作関数。
---------------------------------------------------------
function uniqueArray(array) {
var storage = {};
var resultAry = [];
var value;
for ( var i=0; i

不等号の大なり小なりの覚え方

大なり「<」小なり「>」の覚え方。

大なり小なりは左の数字が基準。

5 > 2 → 「5」が大なり 2

10 < 100 → 「10」が小なり 100

別の覚え方として、顔文字(泣き顔)の >< をイメージ。
この順番が大なり小なり。

「>」→ 大なり。
「<」→ 小なり。

ちなみに大なり(>)は英語で「greater than」、小なり(<)は英語で「less than」である。

なお、なり[並立助詞]とは、並列・列挙した中から、どれか一つを選択する意を表す。
「兄さん―姉さん―に教えてもらいなさい」「御飯にする―お風呂に入る―早くして」「大―小―」
(コトバンク デジタル大辞泉より)

さくらにて、異なるドメイン間でリダイレクトする

さくらインターネットにて .htaccess 内に RewriteRule を記述してリダイレクトを指定したがうまくいかなかった。どうもドメインをまたいでのURL遷移は禁止されているらしい。

・さくらインターネットで、RewriteRule を用いて異なるドメイン間のリダイレクトは不可。

php を使ってのリダイレクトは問題なく出来た。

---------------------------------
<?php
header( "HTTP/1.1 301 Moved Permanently" );
header( "Location: http://$new_url" );
?>
---------------------------------

html_entity_decodeで文字化けしたときの対処法

さくらにて、同じサーバーで異なるドメインを運用中、片一方のドメインだけで文字化けが発生した。文字化け発生箇所は html_entity_decode を実行した直後。

原因はphpのバージョンの違いだった。
html_entity_decode のエンコードのデフォルト値はphpのバージョンで異なる。

PHP 5.6.0 以降では、デフォルト値として default_charset の値が使われる。PHP 5.4 と PHP 5.5 のデフォルト値は、 UTF-8 で、それより前のバージョンの PHP のデフォルト値は ISO-8859-1 である。

私のさくらサーバーはhtmlファイル内でphpを実行させるため、ルートファイルにphp.cgiをコピーしている。で、さくらのphpのバージョンはコピーしたphp.cgiで決まる。今回片一方のドメインのみで文字化けが起こったのはphp.cgiのバージョンが異なったためだった。

文字化けなしのphp.cgiをコピーして問題は解決した。なお、html_entity_decode では encoding というオプションの引数で文字コードを変えることが可能である。

UTF-8なら、
html_entity_decode($str,ENT_NOQUOTES,'UTF-8')