【HSP3】strrep命令を入れ子(ネスト)にすると、意図した動作をしない

バグではなくて、仕様なのかもしれませんが。。。hsp3.5 beta2 にて確認。

バグではなくて、仕様なのかもしれませんが。。。hsp3.5 beta2 にて確認。

  • hk1v
  • 2015/11/28 12:23
  • タグ:
  • タグはありません
#module _Mod_HTML_
// 指定された文字列のHTMLエスケープを行います
#defcfunc escapeHtml str html, \
	local tmp
;
	tmp =  html
	strrep tmp, "&", "&"
	strrep tmp, "<", "&lt;"
	strrep tmp, ">", "&gt;"
	strrep tmp, "'", "&apos;"
	strrep tmp, "\"", "&quot;"
;
	logmes tmp
return tmp
#global
;
	strHtml = "<b>$A$</b>"
	strIns = "こんにちは><"
;
	; 予想: <b>$A$</b>
	; 結果: <b>$A$</b>
	mes "☆1: " + strHtml
;
	; ※ 単体では正常動作します。
	; 予想: こんにちは&gt;&lt;
	; 結果: こんにちは&gt;&lt;
	mes "☆2: " + escapeHtml(strIns)
;
	; ※ strrepを入れ子にすると予想と違う結果に…
	; $A$ という文字列を探して、エスケープ済みの文字列に置き換えます。
	; 予想: <b>こんにちは&gt;&lt;</b>
	; 結果: こんにちは&gt;&lt;
	strrep strHtml, "$A$", escapeHtml(strIns)
	mes "☆3: " + strHtml
;
	; ※ 入れ子にしなければ、予想通りの動きをする。
	; 予想: <b>こんにちは&gt;&lt;</b>
	; 結果: <b>こんにちは&gt;&lt;</b>
	strHtml = "<b>$A$</b>"
	tmp = escapeHtml(strIns)
	strrep strHtml, "$A$", tmp
	mes "☆4: " + strHtml