2010-04-03 38 views
1

假设我包含一个包含html的文件。该html的字符作为感叹号,西班牙口音(á,ó)。解析的包含文本被处理为符号而不是正确的值。这发生在FF上,但不在IE(8)上。如何正确地将输入转换为HTML字符

我曾尝试以下功能:

用htmlspecialchars,ヶ辆,函数utf8_encode

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

样品file.php内容:

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

输出:

Canci�n, �Song Name� 

回答

0

这是结束在两个不同的代码上工作,我的伎俩;原因很难知道,但解析的东西。

这是浏览器显示(FF + IE) - >

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

样品**( '包括' 不函数使用,所以不需要输出缓冲器):

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

这一个不适合我:

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

如果上面的示例使用包含文件w ith html代码,它至少不会为我转换字符。我改变它不是包含文件,并与utf8_encode一起工作,但问题是我的代码需要在哪里使用include函数,哪些不起作用。

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

我的代码情景(针对我的具体方案具有可与OB,因为包括文件还包含代码需要首先分析):

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

谢谢你帮我弄明白“的Ondrej Slinták“ !!!

2

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

0

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

+0

我只需要搜索包含特殊字符的文件并在包含之前转换为html实体。 – Codex73 2010-04-03 14:56:22

+0

@ Codex73如果你已经使用了utf-8,并且你的文本在utf-8中确实是'',你不需要将字符转换为实体。只是抛出htmlentities – 2010-04-03 15:04:41

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> 
+0

我使用这个: Codex73 2010-04-03 15:00:35

+0

请尝试查看您的浏览器的编码。也许它由于某种原因被设置为不同的东西。我试过你的代码,它工作正常。我会用我试过的代码编辑我的文章。 – 2010-04-03 15:16:13

+0

你确定你不用浏览器编码重写页面编码,如果它发生在FF?你可以尝试其他浏览器吗?只是为了确定它在FF内而不是PHP端错误。 – 2010-04-03 15:40:57

相关问题