Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否将自定义标记转换为HTML?_Javascript_Php_Html_Handlebars.js_Markdown - Fatal编程技术网

Javascript 是否将自定义标记转换为HTML?

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

挑战:我们的用户可以访问“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="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'