PHP-код для закрытия незакрытых тегов привязки

#javascript #php #html

#javascript #php #HTML

Вопрос:

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

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

 $SQL = "SELECT * FROM Words WHERE Date_Created = DATE('2016-10-06') AND category = 'Article' ORDER BY ID DESC LIMIT 5";
$result = mysql_query($SQL);
while($row = mysql_fetch_array($result))
{
echo '<div class="storylist2">';
echo "<br/>";
echo '<h2><a href="http://www.AHA.com/words/display_art.php?ID='.$row['ID'].'">' .stripslashes($row['Title']). '</a></h2>';

$s = stripslashes($row['Word']);

    $s = substr($s, 0,800);  //adjust as necessary
    $s = substr($s, 0, strrpos($s, "."));   

    $s .= "...";

echo '<h6>'. $row['Display_Date'].'</h6>';
echo '<h6>'. $row['Author']. '</h6>';
echo closetags("$s");
echo "<br/>";
if($row['url'] != "")
{
        echo "<br/>";
        echo '<span class="articlelink">(<a href="http://www.AHA.com/words/display_art.php?ID='.$row['ID'].'">more</a>)';
        echo "<br/>";
} 
else {
        echo "<br/>";
        echo '(<a href="http://www.AHA.com/words/display_art.php?ID='.$row['ID'].'">more</a>)</span>';
        echo "<br/>";
}
echo "<br/>";
echo "<br/>";

echo "</div><hr style="color: #006699; margin: 10px 20px; "/>";
  

Я перечислил выше код, который у меня есть в настоящее время для извлечения записей на веб-страницу, я слышал, что есть способ убедиться, что усечение не прерывается в середине тега, но, честно говоря, я не знаю, как это сделать. Также за последние несколько дней я нашел некоторый PHP, который закрывает теги, на которые ссылается this echo closetags("$s"); , но, к сожалению, я не смог приступить к работе с тегами привязки. Пожалуйста, помогите, спасибо!

Комментарии:

1. Пожалуйста, перефразируйте свой вопрос. Я думаю, что речь идет только об удалении тегов шрифтов? И вы не должны использовать mysql_query, а pdo или mysqli среди прочего

2. Нет, не об удалении тегов шрифтов, а о том, что незакрытые теги html, в частности привязка, закрыты с помощью функции php, я перефразирую свой вопрос, извините за путаницу. Я знаю, что мне нужно поработать над изменением его на mysqli, я откладывал это, пока не исправлю это.

3. Это if ($count=1) присваивание, и оно будет постоянно оцениваться как true. Отправьте текст из базы данных через htmlspecialchars(), прежде чем записывать его как html. Это позволяет избежать текста, нарушающего ваш синтаксис html.

4. Хорошо, я удалил оператор if ($count=1) and else, поскольку это было необходимо после удаления IF . htmlspecialchars () работает, но он заставляет его отображаться в их формате html, но мне нужно отображать в обычном текстовом формате, поскольку это отображается на небольшом новостном сайте, и отображение в формате html не имеет смысла

5. О, теперь я думаю, что понимаю, что вы имеете в виду. $row['Word'] это длинный HTML-текст, и вы хотите сократить его, не нарушая его синтаксис. Боюсь, вам придется использовать simplexml amp; Co: создайте дерево из вашего html-текста, напишите его и, когда вы написали достаточно символов, закройте ожидающие открытия теги.

Ответ №1:

Вы можете удалить <a> теги и оставить только текст привязки для любой строки, запустив ее через preg_replace перед ее усечением:

 $no_a_tags = preg_replace('/<a.*?>([^>]*)</a>/i', '$1', $with_a_tags);