1

不適切に変換されたヘブライ語 PDF を処理するために、HTML ドキュメント内のテキストを反転する PHP スクリプトを作成しています。(はぁ :))

すべてが機能しますが、スクリプトの出力は非常に奇妙です。一部の文字のみが、ヘブライ文字のままではなく、空白の文字 (疑問符の付いた黒いひし形) に変わります。

SO以降で見つけることができるいくつかの解決策を試しましたが、何も変わりませんでした。おそらくあなたは私を啓発することができますか?

スクリプトの動作は pilau.phpnet.us/html_invert.php で確認できます。これがソース コード全体です。

<!DOCTYPE html>
<html lang="he-IL">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <form action="html_invert.php" method="post" enctype="application/x-www-form-urlencoded">
        <textarea id="html_code" name="html_code" rows="30" cols="80"><?php
            if (isset($_POST['html_code']))
            {
                function invert_string ($str) {
                        $new_str = '';
                        $i = strlen($str);
                        while ($i > 0) {
                            $new_str .= substr($str, --$i, 1);
                        }
                        return '>'.$new_str.'<';
                    }

                    echo htmlspecialchars(preg_replace('/>(\s*.*\s*)</imUue', 'invert_string("$1")', stripslashes($_POST['html_code'])));
            }
            else { echo 'paste your text here'; }
        ?></textarea>
        <br />
        <input type="submit" value="Process HTML" />
    </form>
</body>
</html>
4

2 に答える 2

1

私が推測する文字セットに何か問題があるようです。

php.ini で default_charset を探します。これは iso-8859-1 に設定されている可能性があります。

編集:今考えてみると、このヘッダーを送信することもできます:

header('Content-Type: text/html; charset=utf-8'); 
于 2012-04-20T15:10:29.837 に答える
0

私はこの質問に回答済みのマークを付けたかったので、上記の質問のコメントで説明されているように、WoobleとMatthewの好意で解決策を示します。

とを使用mb_substr('UTF-8')し、次の正規表現mb_strlen('UTF-8')に置き換えました。stripslashes()preg_replace(array('/\x5C(?!\x5C)/u', '/\x5C\x5C/u'), array('','\\'), $_POST['html_code'])

したがって、完全なコードは次のとおりです。

    <textarea id="html_code" name="html_code" rows="30" cols="80"><?php
        if (isset($_POST['html_code']))
        {
            function add_delimiters ($str, $deli, $optional_suffix) {
                return (isset($optional_suffix) ? $deli.$str.$optional_suffix : $deli.$str.$deli);
            }

            function reverse_string ($str) {
                $new_str = '';
                $i = mb_strlen($str, 'UTF-8');
                while ($i > 0) {
                    $new_str .= mb_substr($str, --$i, 1, 'UTF-8');
                }
                return $new_str;
            }

            function utf_stripslashes ($str) {
                return preg_replace(array('/\x5C(?!\x5C)/u', '/\x5C\x5C/u'), array('','\\'), $str);
            }

            function strip_blank_lines ($str) {
                return preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/u", "\n", $str);
            }

            function reverse_html_content ($html) {
                return preg_replace('/>(\s*.*\s*)</imUue', 'add_delimiters(reverse_string("$1"), ">", "<")', utf_stripslashes($html));
            }

            function clear_unsupported_css ($style) {
                return preg_replace(array('/top:\s{0,1}([0-9]*(?!px));{0,1}/iu', '/left:\s{0,1}([0-9]*(?!px));{0,1}/iu'), array('top:$1px;', 'left:$1px;'), $style);
            }

            function process_inline_style ($html, $func) {
                return preg_replace('/style="[a-zA-Z0-9:;\s{0,1}]*"/imUue', $func.'("$0")', $html);
            }               

            echo strip_blank_lines(htmlspecialchars(process_inline_style(reverse_html_content($_POST['html_code']), 'clear_unsupported_css')));
        }
        else { echo 'paste your text here'; }
    ?></textarea>
于 2012-11-12T12:13:22.427 に答える