web-dev-qa-db-ja.com

ウォッチドッグメッセージで改行とHTMLを印刷するにはどうすればよいですか?

私は私のローカル開発環境でテストするためにウォッチドッグにメールを記録しようとしています。

function MYMODULE_mail_alter(&$message) {
  // First: Prevent the mail from being sent.
  $message['send'] = FALSE;

  // Next: Log the mail so it can be debugged if necessary
  ksm($message);
  $logemail = $message['subject'] .'\nThe following email was not sent: \n<pre>Subject:<br>' . $message['subject'] . '<br>Body:<br>'  . $message['body'][0] . '</pre>';
  watchdog('MYMODULE', '@logemail', array('@logemail' => $logemail), WATCHDOG_ALERT);
}

ただし、これによりMessageの値が得られ、改行がなく、HTMLを無視します<br>および\n

Patrick K, new members for the week of April 23\nThe following email was not sent: \n<pre>Subject:<br>Patrick K, new members for the week of April 23<br>Body:<br><p>Dear Patrick K,</p> <p>We haven't seen you in awhile. Hundreds of people have joined since you last logged in.</p> <p><a href="">Log in now and say hello to our newest members!</a></p></pre>

ウォッチドッグメッセージで改行とHTMLをレンダリングするにはどうすればよいですか?

3
Patrick Kenny

ただし、これにより、改行がなく、HTMLの<br>および\nを無視するMessageの値が得られます。

同様にそれは:)

HTMLメッセージを<pre>タグで囲みました。このタグの役割は、すべてをリテラルテキストとして保持することです。これにより、ブラウザはメッセージをHTMLとして解釈しません。修正するには、<pre>タグを削除するだけです。電子メールのコンテンツがユーザーから送信された可能性がある場合は、許可されたタグの適切なリストを使用して、まず filter_xss() を実行し、ログメッセージを表示するときの痛みを回避します。

同時に、\nはHTMLのエスケープ文字ではないため、文字どおりに扱われ、テキストとしてレンダリングされます。これはPHPのエスケープ文字ですが、ブラウザーは複数の空白文字を単一のスペースに折りたたむため、ここでの結果には影響しません。

PHPのnl2brを使用して、\n<br>に自動的に変換することができますが、メッセージの内容が動的である場合、リテラル文字列を使用しているため、改行が必要な場合は、明示的に<br>ではなく\nを使用することもできます。

これは基本的な作業例です:

$message = [
  'subject' => 'test subject',
  'body' => ['<div class="test">some content<br />On a new line</div>'],
];

$allowed_tags = array('div', 'a', 'table', 'br', 'etc...');
$output = '!subject <br />The following email was not sent: <br />Subject:<br />!subject<br />Body:<br />!body';
$args = array('!subject' => filter_xss($message['subject'], $allowed_tags), '!body' => filter_xss($message['body'][0], $allowed_tags));
watchdog('MYMODULE', $output, $args, WATCHDOG_ALERT);

ウォッチドッグメッセージのリストビューではHTMLが取り除かれているため、最初の!subjectnot sent:の後にスペースがないと、一部のメッセージが一緒に実行され、一目で読みにくくなることに注意してください。

3
Clive

以下でお試し頂けますか?.

watchdog("my_module", '<pre>' . print_r( $my_array_or_object, true) . '</pre>');
0
NTT