Я могу прекрасно конвертировать текст из BBCode в HTML, но, скажем, я хочу отредактировать код на странице, на которой он отображается, с тегами HTML вместо BBCode при редактировании в <textarea>
с использованием AJAX.
Скажем, например, я отправляю [b]bold text[/b]
и сохраняю его в своей базе данных. На странице он будет отображаться жирным шрифтом. Когда я пытаюсь отредактировать это на странице, оно отображается как <strong>bold text</strong>
, а затем, когда я его сохраняю, оно избавляется от тегов HTML, потому что я использую htmlspecialchars()
.
Чтобы преобразовать BBCode в HTML, я использую это:
$search = array (
'/(\[b\])(.*?)(\[\/b\])/',
'/(\[i\])(.*?)(\[\/i\])/',
'/(\[u\])(.*?)(\[\/u\])/',
'/(\[ul\])(.*?)(\[\/ul\])/',
'/(\[li\])(.*?)(\[\/li\])/',
'/(\[user=)(.*?)(\])(.*?)(\[\/user\])/',
'/(\[quote\])(.*?)(\[\/quote\])/',
'/(\[code\])(.*?)(\[\/code\])/'
);
$replace = array (
'<strong>$2</strong>',
'<em>$2</em>',
'<u>$2</u>',
'<ul>$2</ul>',
'<li>$2</li>',
'<a href="../login/profile?u=$2" target="_blank">$2</a>',
'<quote>$2</quote>',
'<code>$2</code>'
);
$string = preg_replace($search, $replace, $string);
Строка — это любой текст, который извлекается из базы данных.
Я хочу, чтобы BBCode отображался в текстовой области, поэтому, если он нуждается в редактировании, вместо HTML-тегов используется BBCode.
Вот как выглядит AJAX с комментариями, которые помогут вам понять его:
$('#editPost').click(function() { //Button used to edit posts
$('#editablePost').val($('#post').html()); //Textarea gets the post html
$('#editablePost').show(); //The textarea is hidden until needed
$('#post').hide(); //Hides original post
$('#editablePost').focus(); //Focuses on the textarea
});
$('#savePost').click(function() { //Button used to save posts
$('#post').html($('#editablePost').val()); //Post gets the value of textarea
$('#editablePost').hide(); //Hides the textarea
$('#post').show(); //Shows post with new text in it
// Code below is what I use to send the information to the database and update
$detail = $('#post').text();
$edit = $('#editPostTime').text();
$id = $('#questionId').text();
$.ajax({
url: 'editPost.php',
type: 'post',
data: {detail: $detail, edit: $edit, id: $id},
datatype: 'html',
success: function() {
<?php
date_default_timezone_set('Europe/London');
$datetime = date("d/m/y H:i"); // create date and time
?>
$('#editPostTime').text('Edited: <?php echo $datetime; ?>'); //Updates on page when post was edited
}});
});
Я надеюсь, что это не слишком многословно, хотя я старался быть как можно более подробным.