如何使用HTML等价物自动替换所有特殊字符?

时间:2010-08-02 18:30:46

标签: php html special-characters html-entities

我有一个html文档,其中包含数百个特殊字符(例如em破折号,智能撇号,重音egrave等),我想将其转换为其html等价物。

例如,我的文档包含一个“em dash”( - ),我想将其转换为:

 —

当然,我的html文档包含html标签。我不想将部分html标签(例如“<”或“>”)转换为html等价物。

是否有任何工具(php脚本,Web应用程序,桌面应用程序等)可以上传我的html文档,并返回相同的文档,但是根据需要修改为包含html等效文件?

我有很多文件,有许多特殊字符。我想避免使用“查找和替换”(对于每个特殊字符)作为解决方案......需要太长时间。

3 个答案:

答案 0 :(得分:1)

你可以使用类似的东西:

<?php
ob_start();
include 'test.html';
$content = ob_get_contents();
ob_clean();
$new = str_replace('<','$start$',$content);
$new = str_replace('>','$end$',$new);
$new = htmlentities($new);
$new = str_replace('$start$','<',$new);
$new = str_replace('$end$','>',$new);
echo $new;
ob_end_flush();
?>

然后只需将test.html更改为您想删除特殊字符的文件

编辑: 对于同一目录中的每个html文件,这都是自动化的:

<?php
foreach(glob('*.html') as $file){
ob_start();
include $file;
$content = ob_get_contents();
ob_clean();
$new = str_replace('<','$start$',$content);
$new = str_replace('>','$end$',$new);
$new = htmlentities($new);
$new = str_replace('$start$','<',$new);
$new = str_replace('$end$','>',$new);
$file = fopen($file,'w');
fwrite($file,$new);
fclose($file);
}
echo 'done';
ob_end_flush();
?>

答案 1 :(得分:1)

$new = str_replace(array('&lt;', '&gt;'), array('<', '>'), htmlentities($old));

答案 2 :(得分:0)

如果您仍想这样做:

Create a list of special chars with their respective code:

例如:

$htmlNumbers = array( "0" => array( "char"=>"—", "code"=>"&#8212" ),
                      "1" => array( "char"=>"@", "code"=>"&#64" ),
                      ---------------------
                      --------------------- 
                    );

现在从html文件中获取html内容,并使用str_replace将所有字符替换为其代码:

$html = file_get_contents("index.html");

for( $i=0; $i<count( $htmlNumbers ); $i++ ) {                    
    $html = str_replace( $htmlNumbers[$i]['char'] , $htmlNumbers[$i]['code'], $html );
}

echo $html;

现在您可以使用文件处理方法将输出保存到html文件中。