如何正确地将输入转换为HTML字符

时间:2010-04-03 14:44:14

标签: php html encoding character-encoding

假设我包含一个包含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 个答案:

答案 0 :(得分:2)

您的代码除了通过htmlentities()运行字符串“cont / fie.php”之外什么都不做,文件的内容不受此影响。

答案 1 :(得分:2)

您应该在正在查看此内容的HTML页面上将编码设置为UTF-8。 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 :(得分:0)

character encoding中输出一个HTTP Content-Type标头,指定您正在使用的charset parameter(建议使用UTF-8)。

答案 3 :(得分:0)

echo htmlentities(file_get_contents("cont/file.php"));是您可能会问的问题 但是,如前所述,您不能使用htmlentities而是使用UTB-8编码

答案 4 :(得分:0)

这就是最终处理两个不同的代码并完成这个工作的原因;原因很难知道,但解析的东西。

这是浏览器显示(FF + IE) - &gt;

alt text http://i77.photobucket.com/albums/j65/speedcoder/4-3-20101-22-31PM.png

示例**('include'函数不使用,因此不需要输出缓冲区):

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

这个对我不起作用:

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

如果上面的示例使用带有html代码的包含文件,则它至少不会为我转换字符。我将其更改为不包含文件并使用utf8_encode,但问题是我的代码需要使用包含函数的地方,但这不起作用。

下面的示例使用include方法和输出缓冲区,它允许在utf8_encode编码发生之前呈现和解析代码。

我的代码情景(因为我的特定情况必须是ob,因为include文件还包含需要首先解析的代码):

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

感谢您帮助我弄明白“OndrejSlinták” !!!