জাভাস্ক্রিপ্টে উদ্ধৃতি উদ্ধৃতি


211

আমি একটি ডাটাবেস থেকে মানগুলি আউটপুট করছি (এটি সত্যই জনসাধারণের প্রবেশের জন্য উন্মুক্ত নয়, তবে এটি কোম্পানির কোনও ব্যবহারকারী দ্বারা প্রবেশের জন্য উন্মুক্ত - যার অর্থ, আমি এক্সএসএস নিয়ে চিন্তিত নই ))

আমি এর মতো একটি ট্যাগ আউটপুট দেওয়ার চেষ্টা করছি:

<a href="" onclick="DoEdit('DESCRIPTION');">Click Me</a>

বর্ণনাটি হ'ল ডাটাবেস থেকে একটি মান যা এরকম কিছু is

Prelim Assess "Mini" Report

আমি "with" এর সাথে প্রতিস্থাপন করার চেষ্টা করেছি, তবে আমি যা চেষ্টা করি না কেন, ফায়ারফক্স অ্যাসেস শব্দের পরে স্থানের পরে আমার জাভাস্ক্রিপ্ট কলটি কেটে রাখে এবং এটি সমস্ত ধরণের সমস্যা সৃষ্টি করে।

আমি অবশ্যই এর সুস্পষ্ট জবাব বুলগিরি করব, কিন্তু আমার জীবনের জন্য আমি এটি বের করতে পারি না।

কেউ কি আমার বোকামি দেখানোর জন্য যত্নশীল?

এখানে পুরো এইচটিএমএল পৃষ্ঠাটি রয়েছে (এটি শেষ পর্যন্ত একটি এএসপি.নেট পৃষ্ঠা হবে , তবে এটি সমাধান করার জন্য আমি সমস্যা কোড ব্যতীত অন্য সমস্ত কিছুই বের করেছি)

<html>
    <body>
        <a href="#" onclick="DoEdit('Preliminary Assessment \"Mini\"'); return false;">edit</a>
    </body>
</html>

3
আপনার onclickইভেন্ট সংযুক্তিটি নিরবচ্ছিন্ন করা এবং আপনার সমস্ত ডাটাবেস তথ্য একটি ডেটা দ্বীপে স্থানান্তরিত করা ভাল ধারণা । জিনিসগুলি পরিষ্কার হবে এবং আপনার স্ট্রিং ভুল থেকে রক্ষা পেলে আপনি আসলে কিছু প্রকারের সিনট্যাক্স ত্রুটি পাবেন।
জাস্টিন জনসন


আপনি এস্কেপ ("স্ট্রিং") এবং ইউনেস্কেপ ("স্ট্রিং") jquery পদ্ধতিগুলিও ব্যবহার করতে পারেন
অভিরাম

উত্তর:


212

DoEditডাবল-উদ্ধৃতি অক্ষরগুলি স্ক্রাব করার জন্য আপনার যে স্ট্রিংটি লিখছেন সেগুলি আপনাকে এড়াতে হবে । তারা onclickঅকাল সময়ের আগে এইচটিএমএল বৈশিষ্ট্যটি বন্ধ করে দিচ্ছে।

জাভাস্ক্রিপ্টের পালানোর চরিত্রটি ব্যবহার করা \, HTML প্রসঙ্গে যথেষ্ট নয়। আপনার যথাযথ XML সত্তার প্রতিনিধিত্বের সাথে ডাবল-কোটটি প্রতিস্থাপন করতে হবে &quot;


ঠিক আছে, কিন্তু এটা কি হবে না? <a href="#" onclick="DoEdit('Pri প্রাথমিক মূল্যায়ন \ "Mini\"'); মিথ্যা প্রত্যাবর্তন করুন; "> সম্পাদনা করুন </a> আমি চেষ্টা করেছিলাম এবং এটি এখনও ত্রুটিযুক্ত। এটি একটি সাধারণ ডাব্লুটিএফ হতে পারে তবে আমার জীবনের জন্য, আমি এটি দেখতে পাচ্ছি না।
ম্যাট ড্যাডি 5'10

জাভা স্ক্রিপ্টের কোনও বিল্ট-ইন ফাংশন রয়েছে যা ডাবল উদ্ধৃতিগুলি এড়িয়ে যাবে? 'কোও' 'ছাড়াও প্রতিস্থাপন করুন (' '', '& quot;') আমি কিছুই খুঁজে পাচ্ছি না।
কেভিন

4
এটি কোনও জাভাস্ক্রিপ্টের সমস্যা নয়, এটি একটি এইচটিএমএল / এক্সএমএল এনকোডিংয়ের সমস্যা: আপনার কোনও বৈশিষ্ট্যের মান ডাব্লু / ও সেগুলি পলায়নের ভিতরে ডাবল-কোট অক্ষর থাকতে পারে না ... অন্যথায় ব্রাউজার / পার্সাররা মনে করেন যে আপনি বৈশিষ্ট্যটির মান ঘোষণা শেষ করছেন।
হারুন

22
উদাহরণস্বরূপ প্রতিস্থাপনের কোড:'mystring'.replace(/"/g, '&quot;');
জোশুয়া বার্নস

3
পূর্ববর্তী মন্তব্যে একটি অতিরিক্ত উদ্ধৃতি রয়েছে। যে কোডটি কাজ করে তা হ'ল 'মাইস্ট্রিং' re রিপ্লেস (/ '/ জি,' & quot; ');
আগস্টিন লোপেজ

95

&quot; এইচটিএমএল প্রসঙ্গে, আমার আগে যেমন পরামর্শ দেওয়া হয়েছে তেমন এই বিশেষ ক্ষেত্রে কাজ করবে।

তবে, আপনি যদি চান যে আপনার জাভাস্ক্রিপ্ট কোডটি কোনও প্রসঙ্গে স্বাধীনভাবে পালাতে পারে, আপনি জাভাস্ক্রিপ্টের এনকোডিংটি বেছে নিতে পারেন:
'হয়ে \x27
"যায়\x22

সুতরাং আপনার অনক্লিক হয়ে উঠবে:
DoEdit('Preliminary Assessment \x22Mini\x22');

এটি জাভাস্ক্রিপ্ট স্ট্রিংটিকে অন্য একটি জাভাস্ক্রিপ্ট পদ্ধতিতে পরামিতি হিসাবে পাস করার ক্ষেত্রেও কাজ করবে (এটির জন্য alert()এটি একটি সহজ পরীক্ষা পদ্ধতি)।

আমি আপনাকে সদৃশ স্ট্যাক ওভারফ্লো প্রশ্নটিতে উল্লেখ করছি, অনক্লিক হ্যান্ডলারের ভিতরে জাভাস্ক্রিপ্ট কোডের অভ্যন্তরে আমি কীভাবে একটি স্ট্রিং এড়াতে পারি?


2
ধন্যবাদ! আপনার আরও সঠিক উত্তর কারণ এটি প্রাসঙ্গিক নির্বিশেষে স্থানীয় জাভাস্ক্রিপ্ট।
স্কার্ভার 2

2
এটি সঠিক উত্তর, যদিও এইচটিএমএল প্রসঙ্গে &quot;উইল অবশ্যই ব্যবহার করবে using
অলিভার

নোটটি যে &quot;ইনপুট মানগুলিতে প্রয়োজনীয়, যেমন <input value="\x22quoted string\x22">কাজ করবে না।
thdoan

@ 10basetom স্বাভাবিকভাবেই, জাভাস্ক্রিপ্টের পলায়ন কেবল ইভেন্ট হ্যান্ডলারের মতো ( onclick="...") জাভাস্ক্রিপ্ট প্রসঙ্গে কাজ করে । valueকোনও HTML এর প্রসঙ্গের মধ্যে একটি জাভাস্ক্রিপ্ট প্রসঙ্গে, কোনও গুণকের মান প্রক্রিয়া করা হচ্ছে না।
tsemer

প্রতিস্থাপন কোড:'mystring'.replace(/"/g, '\\x22').replace(/'/g, '\\x27')
মুরগি

33
<html>
    <body>
        <a href="#" onclick="DoEdit('Preliminary Assessment &quot;Mini&quot;'); return false;">edit</a>
    </body>
</html>

কৌতুক করা উচিত।


24

ভাবেন, unescapeজাভাস্ক্রিপ্টটিতে ইতিমধ্যে ফাংশন রয়েছে যা এর জন্য অনস্কেপিং করে \":

<script type="text/javascript">
    var str="this is \"good\"";
    document.write(unescape(str))
</script>

2
"পালানো" / "আনস্কেপ" এর সংমিশ্রণটি আমার যা প্রয়োজন তা করেছে। ধন্যবাদ।
লুইস আর

8
অব্যাহতি / আনস্কেপ অবমূল্যায়ন করা হয়। যদিও এনকোডুরি কেবলমাত্র উদ্ধৃতিগুলির চেয়ে বেশি কিছু করে। getochriswest.com/blog/2011/05/23/escape-unescape-drecated
chug2k

12

সমস্যাটি হ'ল এইচটিএমএল পালানোর চরিত্রটি স্বীকৃতি দেয় না। আপনি এইচটিএমএল বৈশিষ্ট্যের জন্য একক উদ্ধৃতি এবং অনক্লিকের জন্য ডাবল উদ্ধৃতি ব্যবহার করে কাজ করতে পারেন।

<a href="#" onclick='DoEdit("Preliminary Assessment \"Mini\""); return false;'>edit</a>

5
বাবা। আমি ভাবছিলাম যে আমি কেন অতীতে প্রাকৃতিক বৈশিষ্ট্যটির জন্য স্বাভাবিকভাবেই ব্যবহার করতে চাইলাম। আমি এগুলি এত গভীরভাবে কখনও আবিষ্কার করি নি। ধন্যবাদ।
ম্যাট ডাউডি

6

মূলত আমি এটি এটি করি str.replace(/[\""]/g, '\\"')

var display = document.getElementById('output');
var str = 'class="whatever-foo__input" id="node-key"';
display.innerHTML = str.replace(/[\""]/g, '\\"');

//will return class=\"whatever-foo__input\" id=\"node-key\"
<span id="output"></span>


2

আপনি যদি জাভাতে এইচটিএমএলটি সংশ্লেষ করছেন, তবে সমস্ত অব্যাহতি সঠিকভাবে করতে আপনি অ্যাপাচি কমন্স-ল্যাং থেকে এই দুর্দান্ত ইউটিলিটি ক্লাসটি ব্যবহার করতে পারেন:

org.apache.commons.lang.StringEcreenUtils
জাভা, জাভা স্ক্রিপ্ট, এইচটিএমএল, এক্সএমএল, এবং এসকিউএল জন্য স্ট্রিংগুলি ছেড়ে যায় এবং আনস্কেপ স্ট্রিংগুলি।


আমি জাভাতে মেথড এক্সপ্রেসনের জন্য org.apache.commons.lang3.StringEcreenUtils.escapeEcmaScript (টেক্সট) ব্যবহার করি। ধন্যবাদ।
হারুন

1

আমি jQuery ব্যবহার করে একটি নমুনা করেছি

var descr = 'test"inside"outside';
$(function(){
   $("#div1").append('<a href="#" onclick="DoEdit(descr);">Click Me</a>');       
});

function DoEdit(desc)
{
    alert ( desc );
}

এবং এটি ইন্টারনেট এক্সপ্লোরার এবং ফায়ারফক্সে কাজ করে।


5
অবশ্যই এটি করে, কারণ আপনি এটি সরাসরি এট্রিবিউটটিতে রাখছেন না। আপনার পদ্ধতিটি ব্যবহার করতে, আমাকে জেএস স্ট্রিংগুলির একটি অ্যারে তৈরি করতে হবে, তারপরে bit ("# Divxxx") ... একটি নির্ধারিত সংখ্যার কাজ করতে হবে do অনুকূল থেকে কম, তবে পরামর্শের জন্য ধন্যবাদ।
ম্যাট ডাউডি

1

আপনি এই দুটি ফাংশন অনুলিপি করতে পারেন (নীচে তালিকাভুক্ত), এবং এগুলিকে সমস্ত উদ্ধৃতি এবং বিশেষ অক্ষরগুলি অব্যাহতি / আনস্কেপ করতে ব্যবহার করতে পারেন। এর জন্য আপনাকে jQuery বা অন্য কোনও গ্রন্থাগার ব্যবহার করতে হবে না।

function escape(s) {
    return ('' + s)
        .replace(/\\/g, '\\\\')
        .replace(/\t/g, '\\t')
        .replace(/\n/g, '\\n')
        .replace(/\u00A0/g, '\\u00A0')
        .replace(/&/g, '\\x26')
        .replace(/'/g, '\\x27')
        .replace(/"/g, '\\x22')
        .replace(/</g, '\\x3C')
        .replace(/>/g, '\\x3E');
}

function unescape(s) {
    s = ('' + s)
       .replace(/\\x3E/g, '>')
       .replace(/\\x3C/g, '<')
       .replace(/\\x22/g, '"')
       .replace(/\\x27/g, "'")
       .replace(/\\x26/g, '&')
       .replace(/\\u00A0/g, '\u00A0')
       .replace(/\\n/g, '\n')
       .replace(/\\t/g, '\t');

    return s.replace(/\\\\/g, '\\');
}

1

নীচের কোডটি সন্ধান করুন যা নিয়মিত এক্সপ্রেশন ব্যবহার করে প্রবেশ করা স্ট্রিংয়ের অংশ হিসাবে একক উদ্ধৃতিগুলি থেকে বেরিয়ে যায়। এটি ব্যবহার করে যদি ব্যবহারকারী-প্রবেশ করা স্ট্রিংটি কমা দ্বারা পৃথক করা হয় এবং একই সাথে এটি স্ট্রিংয়ের অংশ হিসাবে প্রবেশ করা কোনও একক উদ্ধৃতি (গুলি) থেকেও পালিয়ে যায়।

: অর্ডার একক উদ্ধৃতি অব্যাহতি করার জন্য, শুধু একটি ব্যাকওয়ার্ড স্ল্যাশ, মত একটি একক উদ্ধৃতি লিখুন \ ' স্ট্রিং এর অংশ হিসেবে। আমি এই উদাহরণের জন্য jQuery যাচাইকারী ব্যবহার করেছি এবং আপনি আপনার সুবিধার্থে ব্যবহার করতে পারেন।

বৈধ স্ট্রিং উদাহরণ:

'হ্যালো'

'ওহে বিশ্ব'

'ওহে বিশ্ব'

'ওহে বিশ্ব',' '

'এটি আমার পৃথিবী', 'আমি ছাড়া এটি উপভোগ করতে পারি না' ',' স্বাগতম, অতিথি '

এইচটিএমএল:

<tr>
    <td>
        <label class="control-label">
            String Field:
        </label>
        <div class="inner-addon right-addon">
            <input type="text" id="stringField"
                   name="stringField"
                   class="form-control"
                   autocomplete="off"
                   data-rule-required="true"
                   data-msg-required="Cannot be blank."
                   data-rule-commaSeparatedText="true"
                   data-msg-commaSeparatedText="Invalid comma separated value(s).">
        </div>
    </td>

javascript:

     /**
 *
 * @param {type} param1
 * @param {type} param2
 * @param {type} param3
 */
jQuery.validator.addMethod('commaSeparatedText', function(value, element) {

    if (value.length === 0) {
        return true;
    }
    var expression = new RegExp("^((')([^\'\\\\]*(?:\\\\.[^\'\\\\])*)[\\w\\s,\\.\\-_\\[\\]\\)\\(]+([^\'\\\\]*(?:\\\\.[^\'\\\\])*)('))(((,)|(,\\s))(')([^\'\\\\]*(?:\\\\.[^\'\\\\])*)[\\w\\s,\\.\\-_\\[\\]\\)\\(]+([^\'\\\\]*(?:\\\\.[^\'\\\\])*)('))*$");
    return expression.test(value);
}, 'Invalid comma separated string values.');

0

হোয়াইটস্পেস এড়িয়ে চলুন। আমার কাছে মনে হয় ফায়ারফক্স একটিটির পরিবর্তে তিনটি যুক্তি ধরে নিচ্ছে। &nbsp;নন-ব্রেকিং স্পেস ক্যারেক্টার। এমনকি এটি যদি পুরো সমস্যা না হয় তবে এটি এখনও ভাল ধারণা হতে পারে।


0

আপনার ডাবল ব্যাকস্ল্যাশ সহ উদ্ধৃতিগুলি এড়াতে হবে।

এই ব্যর্থতা (পিএইচপি এর json_encode দ্বারা উত্পাদিত ):

<script>
  var jsonString = '[{"key":"my \"value\" "}]';
  var parsedJson = JSON.parse(jsonString);
</script>

এইটা কাজ করে:

<script>
  var jsonString = '[{"key":"my \\"value\\" "}]';
  var parsedJson = JSON.parse(jsonString);
</script>

0

আপনি পলায়ন () এবং আনস্কেপ () jQuery পদ্ধতি ব্যবহার করতে পারেন। নীচের মত,

ব্যবহার করুন escape(str);স্ট্রিং অব্যাহতি এবং ব্যবহার করে আবার পুনরুদ্ধার করতে unescape(str_esc);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.