質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

3回答

583閲覧

SQL【濁点/半濁点文字の結合方法】WordPressサーバー移行にて

saori_f

総合スコア0

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2023/03/14 07:58

実現したいこと

PhpMyAdmin内で、wp_posts、wp_postmetaに含まれている濁点/半濁点文字の結合を行いたいです。
WordPress側で置換ができる方法がある場合はそちらでも大丈夫です。

前提

WordPressサイトのサーバー移行のため、ファイルとDBのエクスポート/インポートを実施しました。
その際に、WordPress側で一部メディア画像が正しく紐づいておらず表示されないという事象が発生しました。
調べたところ、メディアファイル名とWordPress側で呼び出しているURLの文字列が異なることに気づきました。
ファイル名が日本語カタカナで、濁点/半濁点が入っているとき、ファイル名では濁点/半濁点含めて一文字なのに対し、URLではカナと濁点/半濁点が分かれて二文字になっていました。

ファイル名:プ
URL:プ ←一文字削除しようとすると、半濁点だけ無くなります

それによって別の文字と認識され、ファイルが呼び出せなくなっています。
おそらくデータ移行時にWordPress側の文字列が変わってしまったのかなと思います。

お願い

WordPress側の文字列について、カナと濁点/半濁点を結合する良い方法はないでしょうか?
PhpMyAdminで使えそうなSQL文などご存知でしたらご教示いただけますと幸いです。
どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2023/03/14 08:05

日本語ファイル名がマストなのでしょうか? 日本語ファイル名をURLに利用するという意味もよくわからないですね
saori_f

2023/03/14 08:37

ありがとうございます。 ファイル名が英語のほうが望ましいのは私もそう思うのですが、 1000件以上の画像があり、ファイル名の変更より元の状態の復帰のほうが早いかと思い質問させていただきました。 URLも直打ちなどではなくメディアを参照していますが、そもそもメディア欄に画像が出ていない形になっています。FTPのuploadsディレクトリを参照してWordPressのメディア欄を同期し直せたらいいのですが、、、
guest

回答3

0

DBに登録するときにHTML Entityなどの変換したファイル名も一緒にとっておけばよいのでは?

投稿2023/03/14 09:27

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下、WordpressやPHP触ったことないので見当違いの回答になっていたらごめんなさい。

まず状況の確認、整理ですが

URL の日本語表記について

簡単に言えば「だ」をユニコードで表すには2つの方法があり、「だ」を1つのユニコードで表す伝統的な方法と、「だ=た+濁点」と考え、「た」を表すユニコードに続けて濁点を表すユニコードを追加する方法がある。濁点を表す表すユニコードには2種あり、昔の半角濁点のように濁点自体が独立した1文字として扱われるもの(309B)と、「た」に続けると完全に「だ」に見えるべき結合用濁点(3099)が存在する。OSX は「だ」を1つのユニコードで表す方法ではなく、「た」に結合用濁点を付加した方法を採用している。

の記載のうち、ファイル名では1つのユニコードで表されているが、DB内のUR文字列は、結合用濁点つきの2つのユニコードで表されているという状況だと思われます。

上記でのこの2種類の「だ」を統一する方法としては

あらゆる文字に濁点と半濁点を付けてみよう

上の処理は、Unicode正規化と言われる処理で、文字が合成されるNFC(Normalization Form Canonical Composition)を指定しただけだ。

に記載のUnicode正規化のNFC(あるいはNFKC)をおこなえばよいと思います。

そしてPHPにはNormalizer クラスがあるため、コードにて正規化できそうです。

ただしPHPでUnicodeの結合文字を判定する方法

Normalizer::normalize($x, Normalizer::FORM_C);
しかし、これだと、「神」が「神」に正規化されるので、「神」という文字(あくまで例ですが)があると不正とはじくことになってしまいます。

と記載があるように、濁点以外も(意図せず)正規化される可能性があることに注意が必要です。

さてどうしよう…と思ってると【WordPress】functions.phpで濁点/半濁点が2文字結合になっている文字を置換する方法!という情報を見つけました。
結論としては、個別に泥臭く変換するのが確実かと思われます。

投稿2023/03/14 08:46

can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問