Преобразование амперсандов с помощью str_replace - PullRequest
2 голосов
/ 14 июля 2011

У нас есть новостной сайт, я пытаюсь настроить str_replace для преобразования случаев, когда & извлекается из базы данных, в стандарты & (пользователь все еще видит &)

Что происходит, я получаю следующие примеры, выводимые на видимом сайте:

Changing World".  The report
Copper & Gold

вместо ожидаемого места или амперсанда.Данные извлекаются из mysqldb с текстовыми полями.Где я иду не так?

Мой код:

function textfix($text){
    $find = array('&', '<br>');
    $replace = array('&amp;', '<br />');
    $newtext = str_replace($find, $replace, $text);
    return $newtext;
}

HTML-код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Я настоятельно рекомендую вам использовать htmlentities() или htmlspecialchars() функции вместо того, чтобы пытаться преобразовать амперсанды.

1 голос
/ 14 июля 2011

, используя str_replace(), скажет вашей программе беспощадно скрывать любые & до &amp; даже в тех местах, где вам это нужно, например, с &nbsp; или чем-то еще.

Я бы предложил использовать preg_replace() и использовать регулярные выражения, такие как /&[^\w]/, чтобы убедиться, что вы заменяете только независимые амперсанды.

используя preg_replace(), вы можете использовать массивы как обычно, а параметры такие же, как с str_replace(), но вы должны использовать регулярные выражения в качестве строковых значений массива find.

См. руководство по PHP для получения более подробной информации.

1 голос
/ 14 июля 2011

это не имеет ничего общего с &nbsp;, однако, если у вас есть &nbsp; в вашем $text, оно будет изменено на &amp;nbsp;

, также сообщите нам, что вы видите в исходном кодеэтот фрагмент HTML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...