Как правильно преобразовать ввод в символы HTML - PullRequest
1 голос
/ 03 апреля 2010

Допустим, я включаю файл, который содержит HTML. В HTML есть символы в качестве восклицательных знаков, испанские акценты (á, ó). Анализируемый включенный текст обрабатывается как символы, а не их правильное значение. Это происходит в FF, но не в IE (8).

Я пробовал следующие функции:

htmlspecialchars, htmlentities, utf8_encode

include htmlentities("cont/file.php");

Пример file.php Содержимое:

<div>Canción, “Song Name”</div>

Выход:

Canci�n, �Song Name�

Ответы [ 5 ]

2 голосов
/ 03 апреля 2010

Вы должны установить кодировку UTF-8 на странице HTML, на которой вы просматриваете этот контент. htmlentities не влияет на этот текст вообще.

Я пробовал то же самое со следующим кодом, и он работал нормально:

index.php

<!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">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>TODO supply a title</title>
    </head>
    <body>
        <p>
            TODO write content


            <?php
                include "test.php";
            ?>

            </p>
    </body>
</html>

test.php

<div>ääääääó</div>
2 голосов
/ 03 апреля 2010

Ваш код ничего не делает, кроме как для запуска строки "cont / fie.php" через htmlentities (), на содержимое файла это не влияет.

0 голосов
/ 03 апреля 2010

Это то, что в итоге работает над двумя разными вашими кодами и моим, выполняя трюк; причину трудно понять, но что-то с разбором.

Это браузер показал (FF + IE) ->

альтернативный текст http://i77.photobucket.com/albums/j65/speedcoder/4-3-20101-22-31PM.png

Sample ** (функция 'include' не используется, поэтому выходной буфер не требуется):

<?php 
$varr = '<div>ääääääó</div>'; 
echo utf8_encode($varr); 
?>

Этот у меня не сработал:

<?php
   include "test.php";
?>

Если в приведенном выше примере используется файл включения с html-кодом, он не преобразует символы, по крайней мере, для меня. Я изменил его, чтобы он не был включаемым файлом, и работал с utf8_encode, но проблема в том, что мой код нуждается в использовании функции включения, которая не работает.

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

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

ob_start(); 
include ("cont/file.php"); 
$content = ob_get_contents(); 
ob_end_clean(); 
echo utf8_encode($content); 

Спасибо, что помогли мне разобраться "Ondrej Slinták" !!!

0 голосов
/ 03 апреля 2010

echo htmlentities(file_get_contents("cont/file.php")); это то, что вы, вероятно, спрашиваете.
Но, как упоминалось ранее, вы не должны использовать htmlentities, а кодировать UTB-8

0 голосов
/ 03 апреля 2010

Вывести заголовок HTTP Content-Type, который задает кодировку , которую вы используете (рекомендуется UTF-8) в параметре charset .

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