用PHP脚本替换特殊字符

时间:2016-02-15 19:30:50

标签: php

我想用html代码替换特殊字符。这是代码,但它返回: 0

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Coding...</title>
</head>
<body>
<?php
function coding($string)
    {
        $character = array(" ","!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/","<","=",">","á","Á","é","É","í","Í","ó","Ó","ö","Ö","ő","Ő","ú","Ú","ü","Ü","ű","Ű","@","[","\\","]","^","_","{","|","}","~");
        $code = array("&#32;","&#33;","&#34;","&#35;","&#36;","&#37;","&#38;","&#39;","&#40;","&#41;","&#42;","&#43;","&#44;","&#45;","&#46;","&#47;","&#60;","&#61;","&#62;","&#225;","&#193;","&#233;","&#201;","&#237;","&#205;","&#243;","&#211;","&#246;","&#214;","&#337;","&#336;","&#250;","&#218;","&#252;","&#220;","&#369;","&#368;","&#64;","&#91;","&#92;","&#93;","&#94;","&#95;","&#123;","&#124;","&#125;","&#126;");
        $length=count($character);
        $string1=array();
        for ($a = 0; $a<strlen($string); $a++)
            {
                $found=false;
                $sz='';
                $char=$string[$a];
                for ($i = 0; $i<=count($character); $i++) 
                    {
                        if ($character[$i]==$string[$a])
                            {
                                $sz= $code[$i];
                                $i=count($character);
                                $found=true;
                            };
                    };
                if (!$found) {$sz= $char;}
                //echo $sz;
                $string1[]=$sz; 
            };
        for ($a = 0; $a<=count($string1); $a++)
            {
                $string2=$string2+$string1[$a];
            };
        return $string2;
    };
$string = "áÁéÉíÍóÓöÖőŐúÚüÜűŰ !";
echo coding($string)."\n";
?>
</body>
</html>

编码($ string)步骤:

  • 创建两个数组
  • for 循环中逐个检查字符,如果特别添加html代码到 $ string1 数组,则添加原始字符
  • 从数组
  • 创建字符串($ string2)

请帮助我,我哪里出错了?

2 个答案:

答案 0 :(得分:0)

PHP中有两个标准函数:

  • htmlspecialchars():将normal转换为特殊字符。
  • htmlspecialchars_decode():将特殊字符转换为普通字符。

根据您的代码,您会找到一个从普通字符转换为特殊字符(编码)的函数。这可能就是你想要做的。

    <?php
    // Standard PHP functions
    $string = '&#32;&#33;&#34;&#35;&#36;&#37;&#38;&#39;&#40;&#41;&#42;&#43;&#44;&#45;&#46;&#47;&#60;&#61;&#62;&#225;&#193;&#233;&#201;&#237;&#205;&#243;&#211;&#246;&#214;&#337;&#336;&#250;&#218;&#252;&#220;&#369;&#368;&#64;&#91;&#92;&#93;&#94;&#95;&#123;&#124;&#125;&#126;';
    echo 'htmlspecialchars_decode(): ' . htmlspecialchars_decode($string, ENT_NOQUOTES) . '<br />';
    $string = "'!\"#$%&'()*+,-./<=>áÁéÉíÍóÓöÖoOúÚüÜuU@[\]^_{|}~";
    echo 'htmlspecialchars(): ' . htmlentities(htmlspecialchars($string, ENT_COMPAT)) . '<br />';

    // Based on your code
    function coding($string)
    {
        $character = array(" ","!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/","<","=",">","á","Á","é","É","í","Í","ó","Ó","ö","Ö","o","O","ú","Ú","ü","Ü","u","U","@","[","\\","]","^","_","{","|","}","~");
        $code = array("&#32;","&#33;","&#34;","&#35;","&#36;","&#37;","&#38;","&#39;","&#40;","&#41;","&#42;","&#43;","&#44;","&#45;","&#46;","&#47;","&#60;","&#61;","&#62;","&#225;","&#193;","&#233;","&#201;","&#237;","&#205;","&#243;","&#211;","&#246;","&#214;","&#337;","&#336;","&#250;","&#218;","&#252;","&#220;","&#369;","&#368;","&#64;","&#91;","&#92;","&#93;","&#94;","&#95;","&#123;","&#124;","&#125;","&#126;");
        $result = '';
        $maxind = strlen($string);
        for($i=0; $i<$maxind; $i++) {
            $index = array_search($string[$i], $character);
            if ($index!==false) $result .= $code[$index];
        }
        return $result;
    };
    $string = "'!\"#$%&'()*+,-./<=>áÁéÉíÍóÓöÖoOúÚüÜuU@[\]^_{|}~";
    echo 'coding(): ' . htmlentities(coding($string)) . '<br />'; // htmlentities() to show "as is" in a html page

......给出了这个:

htmlspecialchars_decode(): !"#$%&'()*+,-./<=>áÁéÉíÍóÓöÖőŐúÚüÜűŰ@[\]^_{|}~
htmlspecialchars(): '!&quot;#$%&amp;'()*+,-./&lt;=&gt;áÁéÉíÍóÓöÖoOúÚüÜuU@[\]^_{|}~
coding(): &#39;&#33;&#34;&#35;&#36;&#37;&#38;&#39;&#40;&#41;&#42;&#43;&#44;&#45;&#46;&#47;&#60;&#61;&#62;&#225;&#193;&#233;&#201;&#237;&#205;&#243;&#211;&#246;&#214;&#337;&#336;&#250;&#218;&#252;&#220;&#369;&#368;&#64;&#91;&#92;&#93;&#94;&#95;&#123;&#124;&#125;&#126;

答案 1 :(得分:0)

如果不谈真正的问题:

1)您没有初始化$string2变量

2)循环中的条件无效:

for ($i = 0; $i<=count($character); $i++) 

必须

for ($i = 0; $i<count($character); $i++)

for ($a = 0; $a<=count($string1); $a++)

必须

for ($a = 0; $a<count($string1); $a++)

3)你没有连接字符串,你将它们转换成数字并总结它们:

$string2=$string2+$string1[$a];

必须

$string2 = $string2 . $string1[$a];