それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

php, mysqlで wordpress のテーブルへ pdo したときに文字化けする。

機種依存文字が化けます。

めっちゃ化けます。とくに、外字的な、ハシゴダカのような文字列を扱えません。PDOまじアレ。

PDOのマニュアルとか検索結果を見ても、ほとんど情報がないんですよね。困りました。

Windowsだと外字に登録するような文字列であっても、UTF-8では扱えるのですが、一部の文字では正しく変換されずにクエスチョンマークになって情報が落ちてしまう。

文字化けといえば、文字化けなのですが、豆腐に近い状態の文字化けなのです。

文字コードを次のようにします。

<?php
$pdo = new \PDO( "mysql:host=${host};dbname=${name};charset=utf8mb4", $user, $pass);

または

<?php

$pdo = new \PDO( "mysql:host=${host};dbname=${name}", $user, $pass, [\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"] );

wordpressMySQLの場合、文字コードがutf8mb4になっています。

そのため文字コードutf8mb4 で指定しなくては、ある種の文字が化けます。

wordpress で 直接SQLを発行する場合

<?php

function getPDO (): \PDO {
  [$host, $name, $user, $pass] = [DB_HOST, DB_NAME, DB_USER, DB_PASSWORD];
  $pdo = new \PDO( "mysql:host=${host};dbname=${name};charset=utf8mb4", $user, $pass,
     [\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"] );
  //
  $pdo->setAttribute( \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION );
  //
  return $pdo;
}
function getMySQLi(){
  $mcli = new \mysqli(DB_HOST,DB_USER, DB_PASSWORD, DB_NAME);
  $mcli->set_charset('utf8mb4');
  return $mcli;
}

wsl環境のターミナルで pbcopy/pbpaste でクリップボードにコマンドの結果を入れる。

pbcopy/pbpaste を使いたい

macOSならターミナルとCocoaクリップボードをpbcopy でやり取りできるのですが、WindowsのWSLDebian/Ubuntuでも同じようにコピー・ペーストのクリップボードをターミナルから使いたかった。

調べたら見つかったのでメモ

使い方

openssl -rand -base64 123 | pbcopy
pbpast | cat - 

コマンド pbcopy を作ればいい。

Linuxのときもそうだったけど、ないならなんとかAliasやシェルを組み合わせて実現したらいい。

調べたら、もうすでにあった。

# ~/.bin/pbcopy

#!/bin/bash
# pbcopy for wsl


wsl=/mnt/c/Windows/System32/wsl.exe
clip=$( $wsl wslpath C:/Windows/System32/clip.exe)
ps=$( $wsl wslpath C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe )

##
tee <&0 | $clip
exit 0

# ~/.bin/pbpaste

#!/bin/bash
# pbcopy for wsl


wsl=/mnt/c/Windows/System32/wsl.exe
clip=$( $wsl wslpath C:/Windows/System32/clip.exe)
ps=$( $wsl wslpath C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe )

##
$ps Get-Clipboard | sed 's/\r$//' | sed -z '$ s/\n$//'
exit 0

# PATH に追加。

つくった、コマンドをいつでも使えるようにPATHに追加する。

export PATH=$HOME/.bin:$PATH >> ~/.bashrc
source ~/.bashrc

使っている wsl コマンドについて。

Windows の cmd.exe / ps から wsl を起動するコマンド wsl は、オプションで wslpath を指定すると、windowsのパスを wsl のパスに変換できる。

takuya@DESKTOP-2AO3 C:\Users\takuya > wsl wslpath  C:/Users/takuya/Desktop/
/mnt/c/Users/takuya/Desktop/

つかっている clip コマンドについて

CLIPは「クリップボードへコマンド結果を流し込む」事ができる。昔からあるコマンドです。ただしペーストはできません。

C:\Users\takuya>clip /?

CLIP

Description:
    Redirects output of command line tools to the Windows clipboard.
    This text output can then be pasted into other programs.

Parameter List:
    /?                  Displays this help message.

Examples:
    DIR | CLIP          Places a copy of the current directory
                        listing into the Windows clipboard.

    CLIP < README.TXT   Places a copy of the text from readme.txt
                        on to the Windows clipboard.

ペースト(貼り付け)の実現

ペーストについては、PowerShell(PS)を利用する。

ps Get-Clipboard

これを、WSLのPATH内部からWindowsのコマンドを実行することで実現する。

私の実行環境は

実行環境は、WSL v1 です。WSL2 は暗号化ドライブを一旦解除して、インストールしなおしになるので面倒なので WSL2にバージョンアップしていません・・・

参考資料

https://www.techtronic.us/pbcopy-pbpaste-for-wsl/

VSCode で PlantUML をプレビューする

準備

vscode のインストール

Windows の場合

choco install vscode 

Macの場合

brew install --cask visual-studio-code

プラグインのインストール

f:id:takuya_1st:20210117030149p:plain

PlantUML のインストール

choco install plantuml

インストールするとOpenJDKも一緒にインストールされる。

## java と plantuml.jar のパスを確認。

インストールされた場所の確認する。

choco でインストールすると普段と違う場所になったりするので、 実際の場所 を cmd.exeで確認。

# javaの場所

C:\Users\takuya>where java
C:\Program Files\AdoptOpenJDK\jre-15.0.1.9-hotspot\bin\java.exe

# plantuml の場所

plantuml.jar がほしいのだけれど、 plantuml.jar を探すのは手間なので、先に plantuml.exe を探す。

C:\Users\takuya>where plantuml

C:\ProgramData\chocolatey\bin\plantuml.exe

これで、 plantuml がインストールされた場所がわかった。

choco でインストールすると、choco のは以下に作られるのが面白いですね。

エクスプローラーで開いて確認

plantuml がインストールされた場所がわかったので、このフォルダを開いて plantuml.jar を探す。

インストールした箇所をエクスプローラーで確認します。見つけました。

f:id:takuya_1st:20210117030153p:plain

plantuml.jarjava.exeのパスを設定へ

先程探した、これらのPATHを、PlantUMLのプラグイン設定に追加。

f:id:takuya_1st:20210117030146p:plain

拡張子 PU のファイルを作る

@startuml

class PlantUml

@enduml

このファイルをVS Codeで確認

f:id:takuya_1st:20210117030156p:plain

ALT-D を押してプレビュー

f:id:takuya_1st:20210117030159p:plain

もしプレビューがどうしても使えないとき

そして、どうしてもUMLの作成を急ぐときは、オンライン変換を使う。 http://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000

マニュアルについて

日本語マニュアルもあるので大丈夫だよ。 https://plantuml.com/ja/download