2026年9月7日

2026年9月7日

WordPressのタイトルに特殊文字を入れると起きる問題と対処|記号・引用符・絵文字・スラッグ

WordPressの投稿タイトルには、記号や絵文字を含めほとんどの文字を入れられます。ただし、文字によっては表示が変わったり、タイトルが消えたように見えたり、保存できなかったりすることがあります。

この記事では、WordPress 7.1.4 と MySQL 8.4 の検証環境で実際に投稿を作って確かめた結果(2026年11月時点)をもとに、よくある症状と対処を説明します。

症状と原因の早見表

症状 原因 対処
" が “ ” に、-- が — に、... が … に変わる WordPressの wptexturize() が記号を組版用の文字に置き換える 多くはそのままでよい。止めたい場合はフィルターで無効にする
& が、HTMLのソースや一部の出力で & になる & をHTMLの文字参照に置き換えて出力している 画面では & と表示されるので通常は問題ない
<head>タグの書き方 のような題名で、<head> の部分が消える <…> がHTMLのタグとして扱われる &lt;head&gt; と入力するか、題名の言い回しを変える
保存時に「データベース内の投稿を更新できませんでした」という意味のエラー 投稿の表が utf8mb4 ではなく、4バイトの文字(一部の漢字など)を保存できない 表を utf8mb4 に変換する
スラッグ(URL)が長い %e3%83… の並びになる、途中で切れる 日本語の題名からスラッグを自動で作っている スラッグを英数字で入力する

以下、順に説明します。

引用符・ダッシュ・三点リーダーが変わる

WordPressは、タイトルや本文を表示するとき、wptexturize() という関数で一部の記号を置き換えます。検証では、A & B "quoted" -- test... という題名が、データベースにはそのまま保存され、表示用の get_the_title() では次のように出力されました。

A &#038; B &#8220;quoted&#8221; &#8212; test&#8230;

ブラウザーでは A & B “quoted” — test… と表示されます。データベースの中身は変わっていないので、検索や編集には影響しません。

プログラムのコードを題名に書く技術ブログなどで、この置き換えを止めたい場合は、次のコードをテーマの functions.php か、自作のプラグインに追加します。

<?php
add_filter( 'run_wptexturize', '__return_false' );

この設定は本文やコメントの表示にも効き、サイト全体で置き換えが止まります。追加したあと、同じ題名の出力は A &#038; B "quoted" -- test... になりました。

& が &#038; になる

& は、HTMLでは特別な意味を持つ記号なので、WordPressは表示のときに &#038; という文字参照に置き換えます。ブラウザーでは & と表示されるため、通常は対処の必要はありません。

自作のテーマやプラグインで、タイトルを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> が取り除かれ、タグの書き方 になる
&lt;head&gt;タグの書き方 &lt;head&gt; のまま保存され、画面に <head>タグの書き方 と表示される (同様)

HTMLのタグ名を題名に入れたい場合は、< を &lt;、> を &gt; と入力します。ブラウザーのタブに出る題名(<title>)や検索結果での見え方も確かめ、気になる場合は「headタグの書き方」のように記号を使わない言い回しにします。

なお、マルチサイトでは、ネットワーク管理者以外は unfiltered_html 権限を持たないので、管理者でも投稿者と同じ動きになります。

4バイトの文字で保存できない

絵文字や、「吉」の上の部分が「土」になった字(いわゆる「つちよし」、文字番号 U+20BB7)のような一部の漢字は、UTF-8で4バイトになる文字です。WordPressの表が古い utf8(MySQLの utf8mb3、1文字3バイトまで)のままだと、これらの文字を保存できません。

検証で wp_posts の表を utf8mb3 にして投稿を作ったところ、次のようになりました。

  • 絵文字は、WordPressが保存前に &#x1f600; のような文字参照に置き換えるため、保存はできました(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 フィルターで止められます。
  • & が &#038; になるのは表示のための置き換えで、通常は問題ありません。
  • <head> のような文字列は、管理者が入力するとタグとして扱われて見えなくなります。&lt;head&gt; と入力します。
  • 「つちよし」などの4バイトの漢字が保存できないのは、表が utf8mb4 になっていないためです。絵文字は文字参照に置き換えて保存されます。
  • 日本語や記号を含む題名では、スラッグを英数字で入力しておくと、URLが長くなったり重なったりするのを防げます。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲