Javascript 是否将自定义标记转换为HTML?
挑战:我们的用户可以访问“contentEditable”DIV,JS库在其中插入HTML。下面是我们认为HTML应该如何显示在contentEditable中:Javascript 是否将自定义标记转换为HTML?,javascript,php,html,handlebars.js,markdown,Javascript,Php,Html,Handlebars.js,Markdown,挑战:我们的用户可以访问“contentEditable”DIV,JS库在其中插入HTML。下面是我们认为HTML应该如何显示在contentEditable中: <span class="stylish-blue-button"> <span style="display:none;">[data-user="12345" data-userId="678910"]</span> John Smith <span style
<span class="stylish-blue-button">
<span style="display:none;">[data-user="12345" data-userId="678910"]</span>
John Smith
<span style="display:none;">[/]</span>
</span>
...Blablabla some other text...
问题:在页面上呈现文本时,我们想知道是否有安全/可靠的方法将上述自定义标记转换为(在将其交给handlebar.js之前):
John Smith…布拉布拉其他一些文本。。。
原因:这可以确保用户生成的内容得到安全处理,同时将用户生成的降价保存在contentEditable“pretty”(“Style blue button”类)中
如果您有任何建议使整个过程更简单,我们愿意更改降价的格式
非常感谢你 您可以使用这样的正则表达式:
$string = '<span class="stylish-blue-button">
<span style="display:none;">[data-user="12345" data-userId="678910"]</span>
John Smith
<span style="display:none;">[/]</span>
</span>
...Blablabla some other text...';
echo preg_replace('~\[(data-user="\d+")\h+(data-userId="\d+")\]\s*(.+?)\s*\[/\]\s*(.*)~s', '<span $1 $2>$3</span>$4', trim(strip_tags($string)));
输出:
<span data-user="12345" data-userId="678910">John Smith</span>...Blablabla some other text...
<span data-user="12345" data-userId="678910">John Smith</span>...Blablabla some other text...<span data-user="12345" data-userId="678910">John Smith</span>...Blablabla some other text...<span data-user="12345" data-userId="678910">John Smith</span>...Blablabla some other text...
你可以使用正则表达式;这种格式一致吗?我认为HTML解析是优于regexing HTML的首选方法。既然您正在剥离元素,我认为正则表达式就足够了。我在下面贴了一个答案,展示了你可以采取的方法。非常感谢你的帮助。我非常感激。我知道一些regex网站,但这一个看起来很棒。我会尽快尝试你的建议,并与你保持联系。再次感谢。感谢您的编辑。我已经在尝试一些东西,并将这种方法通过严格的测试。我知道逃跑和抓捕,但你已经教会了我很多。谢谢,我在想;如果我必须替换自定义标记的多个实例(“[data user=29353”…][/]”),我该怎么办?你的建议似乎只替换了一个。我刚刚做了很多研究,似乎preg_replace_callback()是我唯一的选择,但我的测试失败了。再次感谢你。这是因为上一次
(.*)
正在捕获结束后的所有内容[/]
,但实际上不需要,因为它只会替换找到的部分。我的错误,或者说过于复杂。还有其他问题吗?看起来您还有两个问题,都是来自此答案的已接受答案。
<span data-user="12345" data-userId="678910">John Smith</span>...Blablabla some other text...
$string = '<span class="stylish-blue-button">
<span style="display:none;">[data-user="12345" data-userId="678910"]</span>
John Smith
<span style="display:none;">[/]</span>
</span>
...Blablabla some other text...
<span class="stylish-blue-button">
<span style="display:none;">[data-user="12345" data-userId="678910"]</span>
John Smith
<span style="display:none;">[/]</span>
</span>
...Blablabla some other text...
<span class="stylish-blue-button">
<span style="display:none;">[data-user="12345" data-userId="678910"]</span>
John Smith
<span style="display:none;">[/]</span>
</span>
...Blablabla some other text...';
echo preg_replace('~\s*\[(data-user="\d+")\h+(data-userId="\d+")\]\s*(.+?)\s*\[/\]\s*~s', '<span $1 $2>$3</span>', trim(strip_tags($string)));
<span data-user="12345" data-userId="678910">John Smith</span>...Blablabla some other text...<span data-user="12345" data-userId="678910">John Smith</span>...Blablabla some other text...<span data-user="12345" data-userId="678910">John Smith</span>...Blablabla some other text...
preg_replace('~\s*\[(data-user="\d+")\h+(data-userId="[a-zA-Z0-9 ]+")\]\s*(.+?)\s*\[/\]\s*~s'