Posted by Anonymous on November 4, 2010 at 1:43pm
はじめまして
Drupalをはじめた初心者です。
大変恐れ入りますが質問をさせてください。
Viewsの設定で
”ページ”を作ると
下記のようなエラーが(赤枠で)表示されてしまいます。
warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument in /var/www/html/drupal/includes/bootstrap.inc on line 857.
これはどのように対処したらよいものなのでしょうか?
現在、オプションのモジュールには
CCK,Views
だけを入れた状態です。
テーマはMarinelliだけを追加し
現在Marinelliを使っています。
当方の環境はレンタルサーバー(VPS)
MySQLデータベース 5.0.51a
ウェブサーバ Apache/2.0.63 (Red Hat)
PHP 5.2.6
Drupal 6.19
です。
ご多忙の中恐れ入りますがよろしくお願いいたします。
Comments
最新のCCKでのみ生じる、比較的新しいバグのようです。解決
最新のCCKでのみ生じる、比較的新しいバグのようです。解決法はまだないようです。
http://drupal.org/node/894880
僕自身はこのエラーを見ていないし、検証もしていないので、違うかも知れませんが。
ちなみにエラーを非表示にしたい場合、example.com/admin/settings/error-reporting から行うことができます。
dokumori様 ありがとうございます
dokumori様この度はありがとうございます。
なるほどCCKに起因しているようですね。
(drupal.orgのIssuesでの探し方も勉強になりました。)
とりあえずそこは保留にして、他を進めながら様子を見てみます。
該当のバグ報告に私も報告しました。
phpもDrupalをきっかけに勉強中でして、
皆様のご迷惑にならないよう
出来るだけ自力でがんばるつもりですが・・・
今後ともよろしくお願いいたします。
ありがとうございました。
umimono
同じ事象で解決しましたのでご報告致します。
はじめまして、古い問題なので既に解決していたら失礼致します。
一応後から見られる方へ参考になればと思います。
私の場合もViewsでページ作成で表示されました。
【原因調査方法】
このhtmlspecialchars()のエラーは「文字化け文字」を処理しようとした時に起きるようです。
調査する場合は、該当の箇所の↓処理しようとしているテキストを表示してみましょう。
/var/www/html/drupal/includes/bootstrap.inc on line 857
return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
↑なので、
print $text;
すると、結構出力されるのですが、「文字化け文字」が発見出来ます。
私の場合は、Viewsのページ設定のメニュー欄の「 メニューな?」でした。
質問者の場合もViewsのページ追加のタイミングなので同じだと思います。
【対応方法】
ここまで分かれば、楽勝♪
日本語翻訳ファイルの問題なので、修正してあげましょう。
管理画面から「インターフェイスの翻訳」を呼び出し、検索タブにて「含まれる文字列」に今回の「文字化け文字」を入力して検索です。
文字化け文字→メニューな
すると、ヒットしたと思います。
今回は翻訳を戻して、原文の「No menu」にしました。
翻訳ファイルに関しては、私のような日本語人には非常に助かっています、これくらいの修正で済むなら、お安いものですね。
http://twitter.com/#!/taka4nev
報告ありがとうございます。 l.d.o/ja
報告ありがとうございます。
l.d.o/ja 上で、また翻訳ファイル内で文字列を確認してみましたが、特に問題は見当たりませんでした。その「No menu」をインターフェイス翻訳機能で再び「メニューなし」にしなおした場合、エラーは再発するんでしょうか?再発しない場合、インポート時に何かが問題で「し」が化ける...のかな?...興味深い問題です。
ご提案の件、試してみました。
コメントありがとうございます。
ご提案の件、試してみました。
結果は再発します、どうも「長音」がらみで起きるようです。
「めにゅーなし」、「メニューナシ」、「アイウエオーあいうえお」でも文字化け、「メニュなし」は文字化けしません。
一応文字化けしているViewsの画面をアップしてみました。
http://twitpic.com/7gfbfm
http://twitter.com/#!/taka4nev
PHPが古すぎ..
これはhtmlentitiesのバグでしょうね。結構いろいろ直してますから。PHPが古すぎです。VPSということなのでPHP 5.3の最新版で使うのが良いと思います。。
大垣 靖男 / Yasuo OHGAKI / yohgaki@ohgaki.net
http://www.ohgaki.net/ / http://www.es-i.jp//http://www.provephp.com/
もう少し調べてみました。
コメントありがとうございます。
すいません、自分のサーバ環境を報告していませんでした。私もVPS(さくらVPS)ですが、PHP5.3.6にしています。
今更気づいたのですが、「インターフェイス翻訳機能」で再度呼び出した時は「メニューなし」と文字化けしていなかったので、登録自体は正常に行なわれているようです。
ここからは予想ですが、Views管理画面(admin/build/views)での文字化けが最後の1文字だけだったので、Views側から特殊文字をエンコードするために「includes/bootstrap.inc on line 857.」の「check_plain」関数を呼び出す時に、Views管理画面での表示を考えてか(予想です)、bye数指定して抜き出した、翻訳文字を引数として渡しているような気がします。
※文字化けしているのは、「htmlentities」処理前の時点からでした。
試しに翻訳文字を「1234567...」と入力したら、16文字=16byte 有効でした。
utf-8は「カタカナ」、「ひらがな」表示に1文字に3byte使います。
※ utf-8コード表 http://charset.7jp.net/jis0208.html
そのため「メニューなし」の場合だと、「メニューな」の5文字で15byte消費して、「し」の「文字コード3byte」のうち、「1byte=1/3文字コード」抜き出してしまい、文字化けしている気がします。
本当はViewsの管理画面を構築しているphpコードを探せれば良いのですが、Moduleに関しては勉強不足のため、現象からの予想です。
http://twitter.com/#!/taka4nev
こんにちは、taka4nevさんもう解決されているとは思
こんにちは、taka4nevさん
ご丁寧にありがとうございます。
もう解決されているとは思いますが、コードの補足をさせてくださいっ。
お察しの通り、drupal6では以下の様になっており、16byteで切られてしまいます。
<?php
// views_plugin_display_page.inc:209
if (strlen($path) > 16) {
$path = substr($path, 0, 16) . '...';
}
?>
drupal7ではこちらは以下のように改善されています。
<?php
// views_plugin_display_page.inc:271
$options['menu'] = array(
'category' => 'page',
'title' => t('Menu'),
'value' => views_ui_truncate($menu_str, 24),
);
?>
<?php
//views_ui.module:860
/**
* Truncate strings to a set length and provide a ... if they truncated.
<em>
* This is often used in the UI to ensure long strings fit.
*/
function views_ui_truncate($string, $length) {
if (drupal_strlen($string) > $length) {
$string = drupal_substr($string, 0, $length);
$string .= '...';
}
return $string;
}
/*****
</em> function drupal_substr()
* http://api.drupal.org/api/drupal/includes--unicode.inc/function/drupal_s...
*****/
?>
以前に一度私も同じ現象になったのですが、実際のメニューの表示は問題がなかったので報告していませんでした。
ただ、7では修正されていることから何かしら報告はあったみたいですね。
jun784さんありがとうございます。 既に検出済みの事象
jun784さんありがとうございます。
既に検出済みの事象だったんですね。
丁寧にソースありがとうございます。
これを見本にちょっとはmoduleも追えるように勉強してみます。
自分だと管理画面止まりなので大変参考になりました。
皆さんDrupal7に移行しているようですね。
自分もプライベートから7も手を付けようと思います。(なかなか億劫で。。。。)
twitterフォローします、宜しくお願い致します。
http://twitter.com/#!/taka4nev
@jun784 + @taka4nev:
@jun784 + @taka4nev: 検証と報告ありがとうございました。大変興味深かったです。
最近の変更
substr()で切ってたのですね。それとは別にまだリリースされていないPHP 5.3ブランチでは文字が切れるバグの修正が行われています。参考までに。
[yohgaki@dev php-src-5.3]$ svn diff -r 317523 ext/mbstring/
Index: ext/mbstring/mbstring.c
--- ext/mbstring/mbstring.c (リビジョン 317523)
+++ ext/mbstring/mbstring.c (作業コピー)
@@ -3017,7 +3017,7 @@
/* make encoding list */
list = NULL;
size = 0;
- if (ZEND_NUM_ARGS() >= 2) {
+ if (ZEND_NUM_ARGS() >= 2 && !ZVAL_IS_NULL(encoding_list)) {
switch (Z_TYPE_P(encoding_list)) {
case IS_ARRAY:
if (!php_mb_parse_encoding_array(encoding_list, &list, &size, 0 TSRMLS_CC)) {
大垣 靖男 / Yasuo OHGAKI / yohgaki@ohgaki.net
http://www.ohgaki.net/ / http://www.es-i.jp//http://www.provephp.com/