Reputation: 101543
I have a webpage where I want to replace all standard quote characters "
with the nicer looking quotes. For example, we have
"hello world"
which would be replaced with
“hello world”
in markup, showing the much better looking 'curly' quotes.
The two HTML special characters are pairs, in that they "open" and "close" a quote block, instead of being a generic double dash, which is where I'm struggling - simply replacing all quotes with “
is easy, but I want to do it so the open/close pairs are respected.
Upvotes: 0
Views: 703
Reputation: 24236
I might be missing something obvious here, but I think the following RegEx solution would work -
subject = 'test "abc" test "abc"';
result = subject.replace(/"([A-Za-z ]*)"/ig, "“$1”");
alert(result);
If you were using PHP then you could write some similar code in PHP - (my PHP skills are somewhat lacking though! The code below was generated with RegEx Buddy so it hasn't been tested and may need changing)
$subject = 'test "abc" test "abc"';
$result = preg_replace('/"([A-Za-z ]*)"/i', '“$1”', $subject);
Alternatively, you could load the content into a DIV using PHP then use JavaScript to change the DIV contents, here's a bit of JQuery that would do the job -
$("#contentdiv").text($("#contentdiv").text().replace(/"([A-Za-z ]*)"/ig, "“$1”"));
There's a jsfiddle that demonstrates the above JQuery here.
Upvotes: 2
Reputation: 154958
In case you have a string like test "abc" test "abc"
, you can check for each "
whether it should be an opening or closing one by looking at how many "
are preceeding it:
If it's an even amount it should be “
, otherwise ”
.
var str = 'test "abc" test "abc"';
var splitted = str.split('"');
var result = '';
for(var i = 0; i < splitted.length; i++) {
result += splitted[i] + ( i % 2 == 0 ? '&ldqou;' : '”' );
}
result = result.substring(0, result.length - 7); // remove last appended “
Upvotes: 3