Правильное отображение фрагментов кода без символов Escape - PullRequest
1 голос
/ 29 июня 2011

У меня есть PHP-скрипт, в котором хранятся мои фрагменты кода. Чтобы вставить, я использую:

$snippet_code = mysqli_real_escape_string($conn,trim($_POST['snippet_code']));

Для отображения я использую следующее, заключенное в пред тег:

$snippet_code = htmlentities($row['SnippetText']);

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

Как я могу правильно сделать это? Как правильно хранить и отображать код на странице?

Ответы [ 3 ]

1 голос
/ 29 июня 2011

Если вы получаете ', преобразованное в \', ваш сервер, вероятно, настроен с устаревшей опцией под названием Magic Quotes.Вы можете прочитать об этом в руководстве по PHP .Я советую отключить их , если это возможно.

Кроме того, проверьте свою базу данных.Возможно, ваши текущие данные повреждены.Если это так, вы можете написать небольшой скрипт, который использует stripslashes () , чтобы исправить это.

1 голос
/ 29 июня 2011

Предполагая, что вы имеете в виду escape-последовательности с косой чертой, такие как \", а не escape-последовательности HTML, такие как &, попробуйте это:

$snippet_code = htmlentities(stripslashes($row['SnippetText']));

Если HTML-код вызывает проблемы, просто пропустите вызов htmlentities.

0 голосов
/ 29 июня 2011

Из ваших комментариев кажется, что вы на самом деле говорите о слешах, найденных перед кавычками.

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

Однако, вероятно , что эти косые черты не должны присутствовать в первую очередь.Возможно, вы запускаете mysql_real_escape_string несколько раз, а не один раз ... но, опять же, ничто из того, что вы нам показали, не указывает на это.

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

...