2

HTML文字列を縮小しようとしていますが、特定の文字数でテキストを折り返しています。したがって、HTML文字列にCSSが埋め込まれている場合は、特別な関数が必要です。php関数"wordwrap"を使用してみましたが、テキストを二重引用符( ")と一重引用符(')で囲んで表示を中断します。たとえば、次の文字列がある場合:

font-family: Arial, 'Helvetica Nueue', 'Times Roman'

ここで、たとえば31でワードラップを実行すると、次のようになります。

font-family: Arial, 'Helvetica
 Nueue', 'Times Roman'

また、これにより、ブラウザはロード時にCSS文字列を誤って解釈します。

テキストが引用符(シングルまたはダブル)で囲まれている場合にラップしないワードラップ関数を作成した方法を知っている人はいますか?

ありがとう!

アップデート

コードだけを求めてすみません。これは私が行うことを想定していることです(私は現在プログラミングに取り組んでいます):

CSS文字列をループして、間にある文字列のチャンクを取得します。}または{ブレーク制限に近い場合は、サブストリングを配列に追加します。ループが完了したら、「\ n」を接着剤として使用して、配列を文字列に変換します。

誰かがより良い/異なるアプローチを持っていますか?

4

2 に答える 2

1

PHPwordwrap関数には、特定のASCII文字に関する知識があります。

サンプルテキストでは、一重引用符の内側のスペースを折り返すことを許可したくないので、スペースを改行しないスペースに置き換えることができます。wordwrapその後、それらをラップしなくなります。

$nowrap = function ($string) {
    return str_replace(' ', "\xA0", $string);
};

これは、このような「nowrap」関数のASCIIバージョンです。

一重引用符で囲まれた部分に部分的に適用するだけでよいので、それらの部分を入手する必要があります。これは、正規表現を使用して簡単に実行できます。

/'[^']+'/

ただし、一致にnowrap関数を適用するには、最初の一致グループを入力値にマップするヘルパー関数が必要です。

$first = function ($callback) {
    return function ($params) use ($callback) {
        return $callback($params[0]);
    };
};

次に、これを簡単に適用できます。

$quotes  = "/'[^']+'/";
$subject = preg_replace_callback($quotes, $first($nowrap), $subject);

wordwrap次に、関数を安全に適用できます。この例でwordwrap($subject, 31)は、次の出力が得られます。

font-family: Arial,
'Helvetica Nueue',
'Times Roman'

これらを出力に含めたくない場合は、これらを元に戻すこともできます。

完全なコード:

$subject = "font-family: Arial, 'Helvetica Nueue', 'Times Roman'";

$nowrap = function ($string) {
    return str_replace(' ', "\xA0", $string);
};

$first = function ($callback) {
    return function ($params) use ($callback) {
        return $callback($params[0]);
    };
};


$quotes  = "/'[^']+'/";
$subject = preg_replace_callback($quotes, $first($nowrap), $subject);


echo wordwrap($subject, 31);
于 2012-09-26T16:10:21.230 に答える
0

このHTMLを電子メールで送信する必要がある場合は、quoted_printable_encode()またはのbase64_encode()後にを使用する必要がありますchunk_split()

どちらの方法でも、行が76文字を超えないようにします。

またはのいずれかで、適切なContent-Transfer-EncodingMIMEヘッダーも設定することを忘れないでください。quoted-printablebase64

于 2012-09-26T16:11:15.970 に答える