2026年9月7日
2026年9月7日
WordPressのタイトルに特殊文字を入れると起きる問題と対処|記号・引用符・絵文字・スラッグ
WordPressの投稿タイトルには、記号や絵文字を含めほとんどの文字を入れられます。ただし、文字によっては表示が変わったり、タイトルが消えたように見えたり、保存できなかったりすることがあります。
この記事では、WordPress 7.1.4 と MySQL 8.4 の検証環境で実際に投稿を作って確かめた結果(2026年11月時点)をもとに、よくある症状と対処を説明します。
症状と原因の早見表
| 症状 | 原因 | 対処 |
|---|---|---|
" が “ ” に、-- が — に、... が … に変わる |
WordPressの wptexturize() が記号を組版用の文字に置き換える |
多くはそのままでよい。止めたい場合はフィルターで無効にする |
& が、HTMLのソースや一部の出力で & になる |
& をHTMLの文字参照に置き換えて出力している |
画面では & と表示されるので通常は問題ない |
<head>タグの書き方 のような題名で、<head> の部分が消える |
<…> がHTMLのタグとして扱われる |
<head> と入力するか、題名の言い回しを変える |
| 保存時に「データベース内の投稿を更新できませんでした」という意味のエラー | 投稿の表が utf8mb4 ではなく、4バイトの文字(一部の漢字など)を保存できない | 表を utf8mb4 に変換する |
スラッグ(URL)が長い %e3%83… の並びになる、途中で切れる |
日本語の題名からスラッグを自動で作っている | スラッグを英数字で入力する |
以下、順に説明します。
引用符・ダッシュ・三点リーダーが変わる
WordPressは、タイトルや本文を表示するとき、wptexturize() という関数で一部の記号を置き換えます。検証では、A & B "quoted" -- test... という題名が、データベースにはそのまま保存され、表示用の get_the_title() では次のように出力されました。
A & B “quoted” — test…
ブラウザーでは A & B “quoted” — test… と表示されます。データベースの中身は変わっていないので、検索や編集には影響しません。
プログラムのコードを題名に書く技術ブログなどで、この置き換えを止めたい場合は、次のコードをテーマの functions.php か、自作のプラグインに追加します。
<?php
add_filter( 'run_wptexturize', '__return_false' );
この設定は本文やコメントの表示にも効き、サイト全体で置き換えが止まります。追加したあと、同じ題名の出力は A & B "quoted" -- test... になりました。
& が & になる
& は、HTMLでは特別な意味を持つ記号なので、WordPressは表示のときに & という文字参照に置き換えます。ブラウザーでは & と表示されるため、通常は対処の必要はありません。
自作のテーマやプラグインで、タイトルをHTMLの属性(title="" や alt="" など)に入れるときは、get_the_title() をそのまま使わず、属性用に処理された値を出力する the_title_attribute() を使います。
<?php
// ループの中で、リンクの title 属性に投稿タイトルを入れる例
?>
<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
<head> のような文字列が消える
< と > で囲んだ文字列は、HTMLのタグとして扱われます。検証では、ユーザーの権限によって次のように動きが分かれました。
| 入力した題名 | 管理者(unfiltered_html 権限あり) |
投稿者(権限なし) |
|---|---|---|
<head>タグの書き方 |
そのまま保存され、そのまま出力される。ブラウザーはタグとして扱うので <head> の部分が表示されない |
保存時に <head> が取り除かれ、タグの書き方 になる |
<head>タグの書き方 |
<head> のまま保存され、画面に <head>タグの書き方 と表示される |
(同様) |
HTMLのタグ名を題名に入れたい場合は、< を <、> を > と入力します。ブラウザーのタブに出る題名(<title>)や検索結果での見え方も確かめ、気になる場合は「headタグの書き方」のように記号を使わない言い回しにします。
なお、マルチサイトでは、ネットワーク管理者以外は unfiltered_html 権限を持たないので、管理者でも投稿者と同じ動きになります。
4バイトの文字で保存できない
絵文字や、「吉」の上の部分が「土」になった字(いわゆる「つちよし」、文字番号 U+20BB7)のような一部の漢字は、UTF-8で4バイトになる文字です。WordPressの表が古い utf8(MySQLの utf8mb3、1文字3バイトまで)のままだと、これらの文字を保存できません。
検証で wp_posts の表を utf8mb3 にして投稿を作ったところ、次のようになりました。
- 絵文字は、WordPressが保存前に
😀のような文字参照に置き換えるため、保存はできました(wp_insert_post()が、表が utf8 のときにタイトル・本文・抜粋の絵文字を変換する)。 - つちよしは絵文字ではないので置き換えられず、保存が失敗しました。WP-CLI では
Could not insert post into the database.、データベースのエラーとしてProcessing the value for the following field failed: post_title.と表示されました。日本語の管理画面やREST APIでは、「データベース内の投稿を更新できませんでした。」と、「次のフィールドの値の処理に失敗しました: post_content。提供された値が長すぎるか、無効なデータを含んでいる可能性があります。」(フィールド名は本文ならpost_content、題名ならpost_title)という形のメッセージになります。
表を utf8mb4 に変換すると、どちらもそのまま保存できました。表の文字コードは次のSQLで確かめられます。
SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_COLLATION NOT LIKE 'utf8mb4%';
結果に表が出てきたら、データベースをバックアップしてから utf8mb4 に変換します。手順は下の関連記事で説明しています。
スラッグ(URL)が長くなる・途中で切れる
WordPressは、スラッグを入力しなかったとき、題名からスラッグを自動で作ります。検証では次のようになりました。
| 題名 | 自動で作られたスラッグ |
|---|---|
A & B "quoted" -- test... |
a-b-quoted-test |
C++ & C# 50% / 25% @home |
c-c-50-25-home |
<head>タグの書き方(管理者) |
%e3%82%bf%e3%82%b0%e3%81%ae%e6%9b%b8%e3%81%8d%e6%96%b9(head は消える) |
| 50字ほどの日本語の題名 | %e3%83%af%e3%83%bc… が198文字で切れ、題名の途中までになった |
- 英数字以外の記号(
&、+、#、%、/、@など)は取り除かれ、空白はハイフンになります。 - 日本語は、1文字が
%e3%83%afのような9文字の並び(URLエンコード)になります。スラッグは最大200文字で切られるため、日本語では20字あまりしか入りません。 C++とC#がどちらもcになるように、記号を除いた結果、別の意味の題名が同じスラッグになることがあります。同じスラッグがすでにあると、WordPressは末尾に-2などを付けます。
URLを短く、意味の分かる形にしたい場合は、投稿を公開する前に、エディターの「URL」(スラッグ)の欄に英数字とハイフンで入力します。公開後に投稿のスラッグを変えた場合、WordPressは古いスラッグを記録して新しいURLへ転送します。ただし、固定ページなどの階層のある投稿タイプはこの記録の対象外なので、変える場合は古いURLから新しいURLへの転送を別に用意します。
環境依存文字(①、㈱ など)
① や ㈱、~ などは、UTF-8(utf8mb4)の表であれば、そのまま保存・表示できます。検証でも、これらを含む題名は問題なく保存されました。ただし、Shift_JIS など古い文字コードのデータベースから移したサイトでは、変換のしかたによってこれらの文字が ? になることがあります。その場合は、移行元のデータを確認します。
まとめ
- 引用符やダッシュが変わるのは
wptexturize()の動きで、run_wptexturizeフィルターで止められます。 &が&になるのは表示のための置き換えで、通常は問題ありません。<head>のような文字列は、管理者が入力するとタグとして扱われて見えなくなります。<head>と入力します。- 「つちよし」などの4バイトの漢字が保存できないのは、表が utf8mb4 になっていないためです。絵文字は文字参照に置き換えて保存されます。
- 日本語や記号を含む題名では、スラッグを英数字で入力しておくと、URLが長くなったり重なったりするのを防げます。