Установить заголовок страницы с помощью PHP

Я хочу установить название своей веб-страницы на Ultan.me - Какое бы ни было название сообщения. Я хочу, чтобы он отображал заголовок сообщения. Сообщения отправляются в базу данных MySQL, а строка заголовка называется «заголовок». Любая помощь приветствуется с этим небольшим вопросом.

Обновлять:

Вот сама страница сейчас, но она не отображает заголовок. Должен ли я открыть документ php и подключиться к моей базе данных в другом месте, отличном от его текущего местоположения?

Код (Единственная необходимая часть - это начало):

<html>
<head>

<meta name="keywords" content="Mac user Ultan Casey TheCompuGeeks UltanKC">
<title>Ultan.me - <?echo $title;?></title>

<link rel="stylesheet" href="css/styles.css" type="text/css" />
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<script type="text/javascript" 
src="js/jquery.labelify.js"></script>
<script type="text/javascript">
$(document).ready(function(){
  $(":text").labelify();
});
</script>
<style>
a {text-decoration:none}

</style>
</head>
<body>
<div id="main">

<!-- Menu Start -->
<div id="menu">
<ul>
<li><a href="index.php">home</a></li>
<li><a href="index.php">about me</a></li>
<li><a href="index.php">archives</a></li>
<li><a href="index.php">contact</a></li>
<li><a href="index.php">gallery</a></li>

</ul>
</div>
<!-- Menu End --> 

<img src="images/banner.png" />
<div id="content">
<div id="posts">
<?php
mysql_connect ('localhost', 'root', 'root') ;
mysql_select_db ('ultankc');

if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
    die("Invalid ID specified.");
}

$id = (int)$_GET['id'];
$sql = "SELECT * FROM php_blog WHERE id='$id' LIMIT 1";

$result = mysql_query($sql) or print ("Can't select entry from table php_blog.<br />" . $sql . "<br />" . mysql_error());

while($row = mysql_fetch_array($result)) {

    $date = date("l F d Y", $row['timestamp']);

    $title = stripslashes($row['title']);
    $entry = stripslashes($row['entry']);
    $get_categories = mysql_query("SELECT * FROM php_blog_categories WHERE `category_id` = $row[category]");
    $category = mysql_fetch_array($get_categories);


    ?>
<p><?php echo "<p id='post-title'><strong><a href=\"post.php?id=". $id . "\">" . $title . "</a></strong></p>"; ?><br /><br />
<div id="entry"><?php echo $entry; ?>
</div><br /><br />
<p id="date">Posted in <a href="category.php?category=<?php echo $row['category']; ?>"><?php echo $category['category_name']; ?></a> on <?php echo $date; ?></p>
</p>
<h2 id="share-title">Share This Post</h2>
<div id="social-share">
<li id="link-right"><a href="http://twitter.com/home?status=
I just read <?php echo $title; ?> at http://ultan.me/post.php?id=<?php echo $id; ?>"><center>Twitter</center></a></li>
<li id="link-left"><a href="http://digg.com/submit?url=http://ultan.me/post.php?id=<?php echo $id; ?>"><center>Digg</center></a></li>
<br>
<li id="link-right"><a href="http://www.facebook.com/sharer.php?u=http://ultan.me/post.php?id=<?php echo $id; ?>&t=<?php echo $title; ?>"><center>Facebook</center></a></li>
<li id="link-left"><a href="http://www.google.com/buzz/post?url=http://ultan.me/post.php?id=<?php echo $id; ?>
"><center>Google Buzz</center></a></li>
<div class="clr"></div>
</div>
<h2 id="comments-title">Comments</h2>
 <div id="comment-list">
    <?php

}
$commenttimestamp = strtotime("now");

$sql = "SELECT * FROM php_blog_comments WHERE entry='$id' ORDER BY timestamp";
$result = mysql_query ($sql) or print ("Can't select comments from table php_blog_comments.<br />" . $sql . "<br />" . mysql_error());
while($row = mysql_fetch_array($result)) {
    $timestamp = date("l F d Y", $row['timestamp']);
      printf("<div class='comment-ind'><p id='comments'><a id='username' href=\"%s\">%s</a> %s</p>", stripslashes($row['url']), stripslashes($row['name']), $timestamp);
    print("<p class='comments'>" . stripslashes($row['comment']) . "</p><div class='clr'><br></div></div>");

  }
?>
<div class="clr"></div>
<form id="commentform" method="post" action="process.php">

<p><input type="hidden" name="entry" id="entry" value="<?php echo $id; ?>" />

<input type="hidden" name="timestamp" id="timestamp" value="<?php echo $commenttimestamp; ?>">

<input type="text" name="name" id="name" title="Name (required)" /><br />

<input type="text" name="email" id="email" title="Mail (will not be published) (required)" /><br />

<input type="text" name="url" id="url" title="Website" value="http://" /><br />

<br />
<textarea  title="Your Comment Goes Here" name="comment" id="comment"></textarea></p>

<p><input type="submit" name="submit_comment" id="submit_comment" value="Add Comment" /></p>

</form>
</div>
<div id="pages">

<?php
$total_results = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS num FROM php_blog"));
$total_pages = ceil($total_results['num'] / $blog_postnumber);
if ($page > 1) {
    $prev = ($page - 1);
    echo "<a href=\"?page=$prev\">&lt;&lt;  Newer</a> ";
}
for($i = 1; $i <= $total_pages; $i++) {
    if ($page == $i) {
        echo "$i ";
    }
    else {
        echo "<a href=\"?page=$i\">$i</a> ";
    }
}
if ($page < $total_pages) {
   $next = ($page + 1);
   echo "<a href=\"?page=$next\">Older &gt;&gt;</a>";
}

?>
</div>
</div>
</div>
<!-- Sidebar Start -->
<div class="sidebar">

<!-- Item 1 -->
<div id="side-item"> 
<h2>
<a href="http://www.dailybooth.com/UltanCasey">
<img src="images/db-icon.jpg">Dailybooth
</a></h2>
<div id="side-item-content">
<center>
<img src="http://dailybooth.com/UltanCasey/latest/medium.jpg" />
</center>
</div>

</div>

<!-- Item 2 -->

<div id="side-item">
<h2><img src="images/connect.jpg" />Connect</h2>
</div>
<div id="side-item-content">
<div class="tweet-title"><p><a href="http://www.twitter.com/UltanKc">Latest Tweet:</a></p></div>
<div id="tweet">
<?php

function getTwitterStatus($userid){
$url = "http://twitter.com/statuses/user_timeline/$userid.xml?count=1";

function auto_link_twitter ($text)
{
    // properly formatted URLs
    $urls = "/(((http[s]?:\/\/)|(www\.))?(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.[a-z]+(\.[a-z]{2,2})?)\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is";
    $text = preg_replace($urls, " <a href='$1'>$1</a>", $text);

    // URLs without protocols
    $text = preg_replace("/href=\"www/", "href=\"http://www", $text);

    // Twitter usernames
    $twitter = "/@([A-Za-z0-9_]+)/is";
    $text = preg_replace ($twitter, " <a href='http://twitter.com/$1'>@$1</a>", $text);

    // Twitter hashtags
    $hashtag = "/#([A-Aa-z0-9_-]+)/is";
    $text = preg_replace ($hashtag, " <a href='http://hashtags.org/$1'>#$1</a>", $text);
    return $text;
}

$xml = simplexml_load_file($url) or die("could not connect");

       foreach($xml->status as $status){
       $text = $status->text;
       }
       echo auto_link_twitter ($text);
 }


getTwitterStatus("UltanKC");

?>
</div>
<br>
<ul>
<li id="social"><a href="#">YouTube</a></li>
<li id="social"><a href="#">Twitter</a></li>
<li id="social"><a href="#">LastFM</a></li>
<li id="social"><a href="#">Email</a></li>
</ul>

</div>
<!-- Item 2 End-->
<div id="side-item">
<h2><img src="images/archive.jpg" />Archives</h2>
</div>
<div id="archive-side">
<?php
mysql_connect ('localhost', 'root', 'root') ;
mysql_select_db ('ultankc');

$result = mysql_query("SELECT FROM_UNIXTIME(timestamp, '%Y') AS get_year, COUNT(*) AS entries FROM php_blog GROUP BY get_year");

while ($row = mysql_fetch_array($result)) {
    $get_year = $row['get_year'];
    $entries = $row['entries'];

    echo "<li id='tag'><a href=\"archives.php?year=" . $get_year . "\">Entries from " . $get_year . "  (" . $entries . ")<br /></a></li>";
}

$result1 = mysql_query("SELECT * FROM php_blog_categories ORDER BY category_name ASC");

while($row = mysql_fetch_array($result1)) {

    $result2 = mysql_query("SELECT COUNT(`id`) AS entries FROM php_blog WHERE category = $row[category_id]");
    $num_entries = mysql_fetch_array($result2);

    echo '<li id="tag"><a href="category.php?category=' . $row['category_id'] . '">' . $row['category_name'] . ' (' . $num_entries['entries'] . ')</a></li>';

}
?>
</div>

</div>

<div class="clr" />
</div>
<!-- Sidebar End  -->
<div id="footer">
<p> &copy; Ultan Casey 2010</p>
<p style="margin-top: -18px; float:right"><a href="index.php">Home</a> | <a href="about.php">About Me</a> | <a href="mailto:[email protected]">Email Me</a></p>
</div>
</div>
</div>
</body>
</html>
?>

person Community    schedule 11.08.2010    source источник


Ответы (13)


Вот метод, который я использую (для подобных вещей, а не только для названия):

<?
ob_start (); // Buffer output
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
<title><!--TITLE--></title>
</head>

<body>
<?
$pageTitle = 'Title of Page'; // Call this in your pages' files to define the page title
?>
</body>
</html>
<?
$pageContents = ob_get_contents (); // Get all the page's HTML into a string
ob_end_clean (); // Wipe the buffer

// Replace <!--TITLE--> with $pageTitle variable contents, and print the HTML
echo str_replace ('<!--TITLE-->', $pageTitle, $pageContents);
?>

PHP обычно работает, выполняя любые фрагменты кода и выводя весь вывод непосредственно в браузер. Если вы скажете "echo 'Some text here.';", эта строка будет отправлена ​​в браузер и стерта из памяти.

Что делает буферизация вывода, так это говорит: «Распечатайте весь вывод в буфер. Держите его. НИЧЕГО не отправляйте в браузер, пока я вам не скажу».

Так что это делает то, что он буферизует весь HTML-код ваших страниц в буфер, а затем в самом конце, после тега, он использует ob_get_contents() для получения содержимого буфера (обычно это весь исходный HTML-код вашей страницы, который уже отправлены браузеру) и помещает это в строку.

ob_end_clean() очищает буфер и освобождает часть памяти. Нам больше не нужен исходный код, потому что мы просто сохранили его в $pageContents.

Затем, наконец, я выполняю простой поиск и замену в исходном коде вашей страницы ($pageContents) для любых экземпляров '' и заменяю их тем, что было установлено в переменной $pageTitle. Конечно, тогда он заменит <title><!--TITLE--></title> на название вашей страницы. После этого я повторяю $pageContents, как это сделал бы браузер.

Он эффективно удерживает выходные данные, поэтому вы можете манипулировать ими перед отправкой в ​​браузер.

Надеюсь, мои комментарии достаточно ясны. Посмотрите ob_start() в руководстве по php ( http://php.net/ob_start ), если вы хотите точно знать, как это работает ( а надо)) :)

person Mayur Shah    schedule 12.12.2011
comment
Поскольку вы все равно сталкиваетесь со всеми этими проблемами, почему бы просто не использовать механизм шаблонов, такой как Smarty? - person Brad; 12.06.2012
comment
Работает как шарм. Спасибо - person Liam George Betsworth; 11.03.2013

Вы анализируете поле из базы данных, как обычно.

Затем, скажем, вы поместили его в переменную с именем $title, вы просто

<html>
<head>
<title>Ultan.me - <?php echo htmlspecialchars($title);?></title>
</head>

РЕДАКТИРОВАТЬ:

Я вижу твою проблему. Вы должны установить $title ПЕРЕД его использованием. То есть вы должны запросить базу данных до <title>...

person Federico klez Culloca    schedule 11.08.2010
comment
При попытке что то область после Ultan.me - пустая. Я не открывал PHP в самом начале документа. Нужно ли мне? - person ; 12.08.2010
comment
короткие теги - странная практика - person zerkms; 12.08.2010
comment
Что пытается сказать zerkms, вы должны использовать ‹?php echo $myvar;?› вместо ‹? эхо.... - person Matt Williamson; 12.08.2010
comment
@ Мэтт Уильямсон, теперь я понял. Кстати, я не знал. - person Federico klez Culloca; 12.08.2010

Как насчет использования чего-то вроде:

<?php 
    $page_title = "Your page tile";
    include("navigation.php");             // if required
    echo("<title>$page_title</title>");
?>
person Hasan A Yousef    schedule 05.05.2017
comment
Это сработало для меня, просто сделав эхо "<tittle>YadaYadaYada</title>", а это именно то, что мне было нужно, чтобы получить необработанные страницы/вкладки, простой способ выделиться в моем браузере, даже если в них нет html. - person ccrez; 24.07.2019

header.php имеет тег заголовка, установленный на <title>%TITLE%</title>;, "%" важны, так как вряд ли кто-то наберет %TITLE%, поэтому вы можете использовать это для str_replace() позже. затем вы используете выходной буфер, например

<?php
ob_start();
include("header.php");
$buffer=ob_get_contents();
ob_end_clean();
$buffer=str_replace("%TITLE%","NEW TITLE",$buffer);
echo $buffer;
?>

Для получения дополнительной информации щелкните PHP - как изменить заголовок страницы ПОСЛЕ включения header.php?

person Nana Partykar    schedule 01.09.2015

Переместите получение данных в начало скрипта, а после этого используйте:

<title>Ultan.me - <?php echo htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); ?></title>
person zerkms    schedule 11.08.2010
comment
При попытке что то область после Ultan.me - пустая. Я не открывал PHP в самом начале документа. Нужно ли мне? - person ; 12.08.2010
comment
@клез: так? он сам это придумает. - person zerkms; 12.08.2010
comment
@ThatMacLad: мы понятия не имеем, что вы имеете в виду. попробуй подробнее. - person zerkms; 12.08.2010
comment
Я обновлю сам пост, указав начало моего php-документа, чтобы он мог быть более подробным. - person ; 12.08.2010
comment
Добавлен. Единственная необходимая часть — это начало документа. - person ; 12.08.2010
comment
@ThatMacLad: переместите поиск данных в начало скрипта. - person zerkms; 12.08.2010
comment
Где именно я должен разместить поиск данных? Когда я перемещаю его на самый верх, страница полностью пуста, и область заголовка не отображается. - person ; 12.08.2010
comment
@ThatMacLad: вам нужно научиться программировать или нанять кого-нибудь для этого. нет альтернатив. - person zerkms; 12.08.2010
comment
Да, и просто к вашему сведению... Мне всего 15, так что вы не можете ожидать, что в моем черепе будет втиснут целый мир знаний в области программирования. Я просто искал небольшую помощь. - person ; 12.08.2010
comment
Ваш возраст не является оправданием. Если учишься - то учись на простых примерах кода, а если работаешь - то проблема в том, что у тебя работа, о которой ты ничего не знаешь - person zerkms; 12.08.2010
comment
@Brad: я бы лучше указал флаг и кодировку - person zerkms; 12.06.2012
comment
@zerkms, по умолчанию используется кодировка UTF-8, и я не могу представить ситуацию, когда флага по умолчанию ENT_COMPAT недостаточно. Каждому свое... в конце концов, это ваш пост, я просто добавил немного, чтобы улучшить. - person Brad; 12.06.2012
comment
@Brad: и я не могу представить ситуацию, когда флага ENT_COMPAT по умолчанию недостаточно --- pastebin.com /KPSqZeQ8 и запрос с одинарной кавычкой сделают свою работу - person zerkms; 13.06.2012
comment
@zerkms, А, интересно. Я всегда использую двойные кавычки в своих HTML-атрибутах, но я определенно вижу, где это может вызвать некоторые проблемы. - person Brad; 13.06.2012

Вам нужно установить значение $title перед его повторением.

Кроме того, вы должны действительно дезинфицировать любые данные, прежде чем использовать их в запросах, поскольку это представляет угрозу безопасности.

person Andres Lowrie    schedule 22.03.2013

создайте новую страницу php и добавьте этот код:

<?php
function ch_title($title){
    $output = ob_get_contents();
    if ( ob_get_length() > 0) { ob_end_clean(); }
    $patterns = array("/<title>(.*?)<\/title>/");
    $replacements = array("<title>$title</title>");
    $output = preg_replace($patterns, $replacements,$output);
    echo $output;
}
?>

в <head> добавляем код: <?php require 'page.php' ?> и на каждой странице вызываем функцию ch_title('my title');

person Sterica Capatina    schedule 10.03.2018

Проблема в том, что на $title ссылаются в строке 5 до того, как он назначается в строке 58. Перестроить ваш код непросто, потому что данные извлекаются и выводятся одновременно. Просто для проверки, как работает что-то подобное?

Поскольку вы извлекаете только одну строку, вам не нужно использовать цикл while, но я оставил его в надежде, что это облегчит вам связь с вашим текущим кодом. Все, что я сделал, это удалил фактический вывод из вашего поиска данных и добавил переменные для категории и имени категории, которые затем упоминаются как обычно позже. Кроме того, я не тестировал это. :)

person nilved    schedule 12.08.2010

Будет сложно изменить ваш код, чтобы это работало, но я попробую :)

Итак, поместите это вверху вашего кода:

<?php require_once('mysql.php'); ?>

Верхняя часть файла должна выглядеть так:

<?php require_once('mysql.php'); ?>
<html>
    <head>

    <meta name="keywords" content="Mac user Ultan Casey TheCompuGeeks UltanKC">
    <title>Ultan.me - <?php echo htmlspecialchars($title); ?> </title>

Затем создайте файл с именем mysql.php в том же каталоге, где находится файл, содержащий указанный вами код.

Поместите это mysql.php:

<?php
mysql_connect ('localhost', 'root', 'root');
mysql_select_db ('ultankc');

if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
    die("Invalid ID specified.");
}

$id = (int)$_GET['id'];
$sql = "SELECT * FROM php_blog WHERE id='$id' LIMIT 1";

$result = mysql_query($sql) or print ("Can't select entry from table php_blog.<br />" .       $sql . "<br />" . mysql_error());

$res = mysql_fetch_assoc($result); 

$date = date("l F d Y", $res['timestamp']);
$title = $res['title'];
$entry = $res['entry'];
$get_categories = mysql_query("SELECT * FROM php_blog_categories WHERE `category_id` = $res['category']");
$category = mysql_fetch_array($get_categories);

?>

Что ж, надеюсь, что помогло :)

person Community    schedule 12.08.2010

Я знаю, что это старый пост, но, прочитав это, я думаю, что это решение намного проще (хотя технически оно решает проблему с Javascript, а не с PHP).

    <html>
    <head>
    <title>Ultan.me - Unset</title>
    <script type="text/javascript">
        function setTitle( text ) {
            document.title = text;
        }
    </script>
    <!-- other head info -->
    </head>

    <?php 
    // Make the call to the DB to get the title text. See OP post for example
    $title_text = "Ultan.me - DB Title";

    // Use body onload to set the title of the page
    print "<body onload=\"setTitle( '$title_text' )\"   >";

    // Rest of your code here
    print "<p>Either use php to print stuff</p>";
    ?>
    <p>or just drop in and out of php</p>
    <?php

    // close the html page
    print "</body></html>";
    ?>
person Martin    schedule 16.06.2015

Просто добавьте переменную $title перед функцией запроса

<?php
    $title = "Your title goes here";
    require("header.php");
  ?>

header.php

<title><?php echo $title; ?></title>
person umesh bhanderi    schedule 19.04.2019

<?php echo APP_TITLE?> - <?php echo $page_title;?> 

это должно хорошо работать для вас

person MaidBoggle    schedule 03.11.2013

если вы хотите использовать текущее имя файла сценария в качестве тега заголовка

включить функцию в свой проект

function setTitle($requestUri)
         {
            $explodeRequestUri = explode("/", $requestUri);
            $currentFileName = end($explodeRequestUri);
            $withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $currentFileName);
            $explodeCurrentFileName = explode("-", $withoutExt);
            foreach ($explodeCurrentFileName as $curFileValue) 
            {
               $fileArrayName[] = ucfirst($curFileValue);
            }
            echo implode(" ", $fileArrayName);

         }

и в вашем html включите скрипт функции и замените тег заголовка этим

<title>Your Project Name -
            <?php setTitle($_SERVER['REQUEST_URI']); ?>
        </title>

он работает на php7 и выше, но я понятия не имею о php 5. * Надеюсь, это поможет

person Manojkiran.A    schedule 05.12.2018