1

こんにちは、

サイトの管理者がブログ投稿のマークダウンを入力できるように、javascript ベースのエディター (EpicEditor) を使用しようとしています。送信ボタンをクリックすると、エディターによって生成された文字列が Ruby/Rails サーバーに送信され、RDiscount を介して HTML に処理されます。

 、スペースなどと関係があることを除いて、ほとんどが機能しているようです。EpicEditor で「プレビュー」ボタンをクリックすると、期待どおりの出力が得られるので、文字列がサーバーに送信される方法に関係があることがわかりました。私はまだ Ruby にかなり慣れていないので、文字列エンコーディングなどはあまり得意ではありません。適切な人にとっては、これはかなり単純な質問だと確信しています。

問題を説明するには、コードを表示するだけがおそらく最善です。番号付きリストの下に箇条書きリストを入力しようとしています。そのため、マークダウンは次のようになります。

1. Hello
2. Goodbye
- a list
- entry
3. For something

私の問題は、順序付きリストエントリの後の改行内とその周辺にあるようです。データベースに保存された文字列と、javascript エディターに表示された文字列はまったく同じように見えました。 "\n - had\n"

しかし、さらに調べてみると、「動作中の文字列」(EpicEditor のプレビュー ビューで使用されていたもの) と「失敗した文字列」 (フォームによって渡されたデータベースに保存されている正確な文字列) の間にわずかな違いがありました。 :

working_string.each_byte {|c| puts c}
--> 10, 32, 32, 45, 32, 104, 97, 100, 10
failing_string.each_byte {|c| puts c}
--> 10, 194, 160, 32, 45, 32, 104, 97, 100, 10

どういうわけか/どういうわけか、 の32バイトが変更されていました194 160。さらに調査すると、これは文字列内の通常のスペースと a\xC2またはの問題の\xA0ようであり、 と関係がある (と思います)  

文字列が EpicEditor から Rails サーバー、そしてデータベースに正しく渡されることを確認する簡単な方法はありますか? 役立つ場合は、サーバー側で文字列の置換を行うこともできます....

ありがとう!

更新 1

私は調べて、正確な問題を見つけようとしました。Epiceditor からミラーリングしているテキストエリア (フォームで送信するため) から、Epiceditor からのテキスト、ネットワークを経由したパラメーター、およびデータベース内の文字列を取得しました。マークダウンは次のとおりです (エピセディターのテキスト領域から直接コピー:

## Testing this yet again

Because I want more!! More things to have a good time....

1.  Everywhere!
2.  Anywhere!
  - happy place
  - sad place
3.  Goodbye

これをこの入力に直接貼り付けると、適切にレンダリングされることがわかります。

これをもう一度テストする

もっと欲しいから!!楽しい時間を過ごすためのより多くのこと....

  1. どこにでも!
  2. どこでも!
    • 幸せな場所
    • 悲しい場所
  3. さようなら

この文字列の ASCII 文字は次のとおりです。

[35, 35, 32, 84, 101, 115, 116, 105, 110, 103, 32, 116, 104, 105, 115, 32, 121, 101, 116, 32, 97, 103, 97, 105, 110, 10, 10, 66, 101, 99, 97, 117, 115, 101, 32, 73, 32, 119, 97, 110, 116, 32, 109, 111, 114, 101, 33, 33, 32, 77, 111, 114, 101, 32, 116, 104, 105, 110, 103, 115, 32, 116, 111, 32, 104, 97, 118, 101, 32, 97, 32, 103, 111, 111, 100, 32, 116, 105, 109, 101, 46, 46, 46, 46, 10, 10, 49, 46, 32, 32, 69, 118, 101, 114, 121, 119, 104, 101, 114, 101, 33, 10, 50, 46, 32, 32, 65, 110, 121, 119, 104, 101, 114, 101, 33, 10, 32, 32, 45, 32, 104, 97, 112, 112, 121, 32, 112, 108, 97, 99, 101, 10, 32, 32, 45, 32, 115, 97, 100, 32, 112, 108, 97, 99, 101, 10, 51, 46, 32, 32, 71, 111, 111, 100, 98, 121, 101]

exportFile() を介してエディターの内容をテキストエリアにコピーしています。そのテキストエリアの ASCII 文字は次のとおりです。

[35,35,32,84,101,115,116,105,110,103,32,116,104,105,115,32,121,101,116,32,97,103,97,105,110,10,10,66,101,99,97,117,115,101,32,73,32,119,97,110,116,32,109,111,114,101,33,33,32,77,111,114,101,32,116,104,105,110,103,115,32,116,111,32,104,97,118,101,32,97,32,103,111,111,100,32,116,105,109,101,46,46,46,46,10,10,49,46,32,160,69,118,101,114,121,119,104,101,114,101,33,10,50,46,32,160,65,110,121,119,104,101,114,101,33,10,160,32,45,32,104,97,112,112,121,32,112,108,97,99,101,10,160,32,45,32,115,97,100,32,112,108,97,99,101,10,51,46,32,160,71,111,111,100,98,121,101]

これらの配列を比較すると、次のようになります。

textarea - epiceditor
 => [160, 160, 160, 160, 160] 

 つまり、 exportFile() で EpicEditor からまだ出力されている余分なものがあるようです。これがどこから来ているのかについて何か考えはありますか?次のようにミラーリングを完了します。

var post_body = $("#post_body");
var content = post_body.val();

var editor = new EpicEditor(opts);

editor.on('load', function () {
  editor.importFile(window.location.href, content); //Imports a file when the user clicks this     button
}); 

editor.on('save', function () {
  post_body.val(editor.exportFile());
});

更新 2

PS 以下は exportFile() 出力を修正します。少なくとも私はそれを理解できたことをうれしく思いますが、EpicEditor でネイティブに動作するものを手に入れたいと思っていました!

bad = "#{194.chr}#{160.chr}".force_encoding('utf-8')
good = 32.chr
self.body = body.gsub(bad, good)
4

0 に答える 0