Soru Dize içindeki tüm çift tırnakları değiştir


Bir alanın HTML verileriyle Dize içerdiği veri tabanından veri alıyorum. Kullanılabilecek tüm çift tırnakları değiştirmek istiyorum. parseJSON arasında jQuery.

Java kullanarak ben kullanarak tırnak yerine çalışıyorum ..

details.replaceAll("\"","\\\"");
  //details.replaceAll("\"","&quote;"); details.replaceAll("\"","&#34");

Bu şekilde denedim ama sonuçta ortaya çıkan dize değişikliği göstermiyor. O'reily makale reçete makale apache dize araçları. Başka bir yolu var mı?

Herhangi bir regex falan mı?


44
2018-03-19 12:11


Menşei




Cevaplar:


İşte nasıl

String details = "Hello \"world\"!";
details = details.replace("\"","\\\"");
System.out.println(details);               // Hello \"world\"!

Dizeleri olduğunu unutmayın değişmezBöylece, sadece yapmak için yeterli değildir details.replace("\"","\\\""). Değişkeni yeniden atamalısınız details sonuçtaki dizeye.


kullanma

details = details.replaceAll("\"","&quote;");

yerine, sonuç

Hello &quote;world&quote;!

83
2018-03-19 12:14



İçin +1 Dize değişmez. - Paŭlo Ebermann
stringim şöyle olurdu: ABC <a href="fsgdfs"> <div id = "id1"> df </ div> ... Ben sadece JSON tarafından ayrıştırıldığından emin olmak için alıntıları kaldırmak istiyorum. Yani & alıntı; HTML için btr bir yol olabilir, düşünce idi. - MalTec
+1 unuttum dizesi immutable :) - Tasawer Khan


Olması gerekmiyor:

.replaceAll("\"","\\\\\"")

Yedek String'de BEŞ backslashes.


28
2017-12-06 00:16



Evet, eğer kullanacak olsaydın replaceAll()Doğru yol bu olurdu. Bu yüzden herkes kullanmak istiyor replace() yerine. ;) - Alan Moore
Sadece neden bir saatin daha iyi bir kısmını geçirdim replaceAll() çalışmıyordu. Tamamen olduğunu unutmuş replace() yöntem de - Ben
Neden replaceAll () kullanarak replace () ancak 5 ters eğik çizgiyi kullanarak 3 ters eğik çizgi oluyor? - Ida
Cevabın yöntem imzasında olduğunu düşünüyorum. Bu durumda değiştirilen yöntem gerçekten değiştirilir (CharSequence cs, CharSequence cs1) ve replaceAll replaceAll (String string, String string1) olur. String'i parametre olarak aktarmak için bu ekstra ters eğik çizgi gerekir. - vinay


Bence bu durumda bir regex biraz aşırıya kaçıyor. Sadece dizideki tüm alıntıları kaldırmak istiyorsanız, bu kodu kullanırdım:

details = details.replace("\"", "");

6
2018-03-19 12:13





JSON'da çalışmasını sağlamak için bundan daha fazla karakterden kaçmanız gerekir.

myString.replace("\\", "\\\\")
    .replace("\"", "\\\"")
    .replace("\r", "\\r")
    .replace("\n", "\\n")

ve eğer kullanmak istersen json2.js onu ayrıştırmak için o zaman da kaçmak gerekir

   .replace("\u2028", "\\u2028")
   .replace("\u2029", "\\u2029")

hangi JSON alıntı dizeleri içinde izin verir, ancak hangi JavaScript değil.


4
2018-03-19 12:20



Jquery 1.5 kullanıyorum. Buna ihtiyacım var mı? - MalTec
@MalTec, Dizginiz ters eğik çizgi içeriyorsa, o zaman evet. Dizeniniz varsa düşünün '\\"'. Eğer tırnak içine koyarsanız ve sadece alıntılardan kaçarsanız, o zaman "\\"" geçersiz bir dizedir. Diziniz yeni satırlar içeriyorsa, bunlardan da kurtulmanız gerekir. JQuery'deki dizeler içinde yeni satırlara izin verilmez. - Mike Samuel


Cevabın zaten kabul edildiğini biliyorum, ama sadece çift tırnak ve tek tırnaktan kaçmaya çalışırken bulduğum şeyi paylaşmak istedim.

İşte yaptığım şey: ve bu işe yarıyor :)

kaçmak ikili alıntı:

    if(string.contains("\"")) {
        string = string.replaceAll("\"", "\\\\\"");
    }

ve kaçmak tek tırnak:

    if(string.contains("\'")) {
        string = string.replaceAll("\'", "\\\\'");
    }

Not: Yukarıda kullanılan ters eğik çizgi sayısını lütfen unutmayın.


3
2018-03-05 14:05



Neden çift tırnakları eskop yerine değiştirmek için beş ters eğik çizgi gerekir? her ters eğik çizgi işlevi nedir? - user1169587
String = string.replaceAll ("\" "," ") işlevlerini buldum; zaten çalışıyor, çıktı dizesi zaten tüm çift tırnakları kaldırıyor - user1169587


Bu bir dizgede çift tırnak kaldırmaktır.

str1 = str.replace(/"/g, "");
alert(str1);

2
2017-07-23 11:54



OP, Java için bir cevap istedi. - Matthew Jacobs


Aşağıdaki regex her ikisi için de çalışacaktır:

  text = text.replaceAll("('|\")", "\\\\$1");

0
2017-10-31 01:54