2

だから私はタイポグラフィナチです(彼らはステロイドの文法ナチのようなものです)、次のような複数レベルの二重引用符を含む可能性のある文字列を持っています:

$str = 'Outer text "first level "second level "third level" second level" first level" outer text';

私の母国語では、最大 3 つのレベルの引用がタイポグラフィ上正しく、各レベルには独自の引用符があります。次のように、すべての二重引用符のペアを対応するエンティティに置き換えたいと思います。

  • 第 1 レベル: 「テキスト」 („および”)
  • 第 2 レベル: »テキスト« (»および«)
  • 第 3 レベル: 'テキスト' ( ’)
  • 追加のレベル: 'text' ( ’)

したがって、上記のテキストは次のように出力されます。

外側のテキスト「第 1 レベル」「第 2 レベル」「第 3 レベル」「第 2 レベル」「第 1 レベル」の外側のテキスト

""また、文字列に兄弟ペアが存在する可能性もあります。

$str = 'Quote from my book: "She didn\'t feel "depressed", "tired" or "sad"."';

したがって、これは次のように出力されます。

私の本からの引用: 「彼女は「落ち込んだ」、「疲れた」、または「悲しい」とは感じませんでした。

(これは難しいかもしれませんが、常にスペース、句読点、、、、が"続くか先行することがわかっています),.;?!

最後に、$str属性の引用符を変更してはならない HTML も含めることができます。

$str = '<p class="quote">The error said: <span class="error_msg">"Please restart your "fancy" computer!"</span></p>';

再帰的な正規表現を使用することが可能な解決策になると聞いたことがありますが、文字列が長い HTML テキストである可能性があるため、より効率的な方法を探しています。

更新:quotes CSS のプロパティと<q>要素をすり抜けたようですこれにより、インラインの引用がよりエレガントになります。

4

2 に答える 2

1

HTML を解析してこの種のスマート クォートを行うことは、不可能ではないにしても、非常にトリッキーな作業です。

DOM ローダー ( ) を使用するJoliTypoをビルドし、\DomDocumentすべてのテキスト文字列を処理してタイポグラフィの修正を適用します。EnglishQuotes はその 1 つですが、現時点では最初のレベルのみを処理します。フランス語では、引用符の階層も異なるため、間違いなく私の todo リストに含まれています。

@mohammad ソリューションは単純な文字列に対して機能しますが、JoliTypo と組み合わせると、大きな HTML ドキュメントに対して信頼できる方法で必要なものを取得できる可能性があります。

Outer text „first level »second level ’third level’ second level« first level” outer textこの種の引用符 ( ) が使用されているロケールを尋ねてもよろしいですか?

于 2013-09-04T15:09:32.333 に答える