标题想很久不知道怎么下……
想请教各位前辈们,
小弟目前在做一个发表留言的功能,
目前希望能做到的就是纯文字 + 表情符号(emoji),
未来可能会有放图片连结然后产生预览,不过这不是现在需要做的范围。
环境是php + mysql
目前做到的是,可以辨识出直接输入emoji,会以unicode储存,
然后取出来的时候会用文字的方式显示。
问题点在于,我有找到一个js的插件,
可以让我在textarea里面输入例如“:smile:”,然后他会自动转成
这样子:“<span>...略...</span>”的HTML标签,
透过这个标签可以用CSS将APPLE emoji的"图片"显示出来。
然而,为了安全起见,我在储存textarea文字时,
已经将“<”、“>”、“/”...等字眼转存成HTML代码了,例如:“<”
所以上面那个js插件会变成我在文字框输入:“:smile:”
结果显示在网页时,却如实显示“<span>...</span>”
不知道有没有办法只让这个插件的HTML标签可以顺利转换,
使用者输入的标签则一律如实显示?
附带一问,
因为小弟第一次写php网页,
不知道有没有什么比较安全的防止使用者在文字输入处做攻击?
目前作法是使用 $text = sub_replace("<", "<", $text);
这样子,将几个特殊字符替换掉,
包括:<、>、\、&、\n、空白及双引号(")
不知道这样够不够安全……
简单整理一下问题:
1. 有没有什么办法可以让使用者输入特定的文字安全的存进数据库,
并在取出时将该特定文字以HTML标签方式呈现,其他非特定文字
则如实呈现?
2. 不知道是否有比单纯在存进数据库前把特殊字符replace掉更好的做法?
补充:
目前已改成在写入数据库前这样做:$text = htmlspecialchars($text);
然后会以ajax的方式,将文章用json格式丢回来,稍微测试过,
感觉上应该ok?(原本replace方式后来发现完全不行……)
第一次发文有点囉嗦,先感谢各位前辈的指导! <(_ _)>