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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

530閲覧

wordpressの固定ページにjavascriptタグで日本語を入れると文字コードが出力される

sakur-k

総合スコア7

WordPress

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/05/09 01:50

前提・実現したいこと

環境:
WordPress 4.8.6
PHP 7.1.13

固定ページにjavascriptを使用して、日本語を表示しようとしています。固定ページの日本語は普通に日本語で表示されていますが、
scriptタグ内の日本語が文字コードで出力されてしまいます。
日本語を表示したい場合はどのようにすればよろしいでしょうか?

================ 固定ページに埋め込んだjavascriptの内容 ====================

<script type="text/javascript"> alert("テスト") </script>

================ ここまで ================================================

================ アラートで表示した文字列 ================
テスト
================ ここまで ==============================

試したこと

サーバー側の設定だと思い、htmlファイルを作成し、同じようにjavascriptで実行した結果、日本語で出力されました。
=========================== 作成したhtmlファイル ===========================

<html> <head>
</head> <body>
<script type="text/javascript"> alert("テスト"); </script> </body> </html> =========================== ここまで ===========================

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

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

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

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

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

stampdoor

2018/05/09 03:40

head内に<meta charset="UTF-8">は入っていますか?文字コードの設定の問題かと思いますが。
sakur-k

2018/05/09 04:35

はい。入っています。
CHERRY

2018/05/10 01:21 編集

固定ページに埋め込んだというのは、WordPress の固定ページ投稿画面のテキストエリアに投稿メッセージと一緒に書き込んだということでしょうか? それとも固定ページのテンプレートを編集してテンプレートに埋め込んだのでしょうか?
sakur-k

2018/05/10 01:49

scriptのタグは、投稿画面のテキストエリアに書き込みました。
guest

回答1

0

ベストアンサー

まあとりあえず、phpファイルの冒頭に

php

1mb_internal_encoding('UTF-8');setlocale(LC_ALL, 'ja_JP.UTF-8');

でも入れてみますか

投稿2018/05/09 06:06

KazuhiroHatano

総合スコア7804

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

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

sakur-k

2018/05/09 06:51

page.phpのget_headerの前後でそれぞれ挿入してみましたが、変わりませんでした。 ========================================= <?php get_header(); ?> <?php mb_internal_encoding('UTF-8');setlocale(LC_ALL, 'ja_JP.UTF-8'); ?> =========================================
KazuhiroHatano

2018/05/09 09:15

では、次にブラウザでソースコードを表示して、PHPが出力したHTMLコードの時点では化けていないのか確認しますか
sakur-k

2018/05/09 13:53

<p><script type="text/javascript"> alert("&#12486;&#12473;&#12488;") </script></p> ソースを確認しました。alertは文字化けが発生してる状態になります。
sakur-k

2018/05/09 13:56

追加情報です。h1、h2のタグも日本語ですが、 h1タグはhtmlのソース上で文字化けせずに表示されていますが、h2タグは文字が化けて表示されてることが確認できました。 <h1 class="entry-title">テスト1</h1> <div class="mainbox"> <div id="nocopy" ><!-- コピー禁止エリアここから --> <div class="entry-content"> <h2>&#12486;&#12473;&#12488;2</h2> <p><script type="text/javascript"> alert("&#12486;&#12473;&#12488;") </script></p> </div>
KazuhiroHatano

2018/05/09 14:31

このケースは二重にエスケープされてるのが原因の場合が多いです DBのwp_postsの中に入ってるpost_contentの値 &がエスケープされてたりしませんか? DBから直接値を取り出して入れ直すみたいなことをすると起こるんですけど そういうことはしてませんか?
KazuhiroHatano

2018/05/09 14:34

あと、確かめてないですがもしかしたらhtmlコメントが原因かもしれません wpの本文はhtmlコメントに処理上の意味があるので そこで何か処理が中断されたりして結果二重エスケープになっている可能性もあります
sakur-k

2018/05/09 15:04

固定ページの内容は、なるべく問題を切り分けるため、下記のものしか入れていない状態です。 <h2>テスト2</h2> <script type="text/javascript"> alert("テスト") </script> wp_postsテーブルのpost_contentについても過去のデータで&amp;の文字が含まれてるデータはありましたが、今回のjavascriptを使用してる固定ページには、使用してない状況です。 (過去のデータが悪さしてることはないですよね。。)
KazuhiroHatano

2018/05/10 01:10

どこかマルチバイト対応してない場所で投稿の本文を処理しているところがあって それをエスケープしてからDBに入れてしまっているからこうなっていると予想しているんですが DBには日本語部分が&amp;#12486;みたいな感じで入ってたりしなかったでしょうか?
sakur-k

2018/05/10 02:04

今回、日本語が文字化けしてる投稿の本文以外でS&amp;Pという箇所があったので、一時的にデータを削除して、再度文字化けしてる固定ページを表示しても文字化けが発生しています。 また、htmlのソースを表示してもh2タグの日本語とalertのところだけが文字化けが発生してる状態です。
KazuhiroHatano

2018/05/10 02:54

たとえDBには「&#12486;」で入っていたとしても PHPがそれを出力しようとした時点で適切に「テ」になるはずなのです DBの値としては「&amp;#12486;」みたいにになっているから 「&#12486;」で出力されてしまっていると思うのです DBでは「テ」が「テ」「&#12486;」「&amp;#12486;」 いずれになっているか確認です
sakur-k

2018/05/10 03:42

&amp;の後に、#12486;みたいなところはありませんでした。
KazuhiroHatano

2018/05/10 03:46

wp_postsのpost_contentには文字化けせずに <h2>テスト2</h2> <script type="text/javascript"> alert("テスト") </script> と入っていたってことでしょうか?
sakur-k

2018/05/10 03:56

はい。そうなります。
KazuhiroHatano

2018/05/10 03:59

では出力時の処理においてマルチバイト対応してない箇所があるはずです the_content();ではなくecho get_the_content();で出力をしてみても文字化けするか確認してみてください
KazuhiroHatano

2018/05/10 04:00

あと、WPにデフォルトで入ってるはずのマルチバイトパッチのプラグインを有効化してないならしておいてください
sakur-k

2018/05/10 04:14

<?php echo get_the_content(NULL, false); ?> と変更して、表示したところ文字化けせずに出力できました。
KazuhiroHatano

2018/05/10 04:19

ではプラグインか何かのadd_filter('the_content',...);をしているとこか ショートコードを処理したりしてるとこが マルチバイト対応してない感じっぽいですね ショートコードを使うプラグインを使っているならちょっと切ってみてください
sakur-k

2018/05/10 04:50

ありがとうございました。 Encyclopedia Proというプラグインを無効にしたら正常に出力できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問