我从我的数据库中获取了大量文本值,我需要在需要引用的字符之前添加斜杠来输出。
问题是某些数据之前已经添加了斜杠,而有些则没有。
如何使用例如addslashes()添加斜杠 - 但同时确保在已添加斜杠的情况下不添加额外的斜杠?
示例:
Input: <a href="test.html">test</a>
Output should be: <a href=\"test.html\">test</a>
Input: <a href=\"test.html\">test</a>
Output should be: <a href=\"test.html\">test</a>
这是PHP 5.3.10。
答案 0 :(得分:1)
如果您知道自己没有任何双斜线,只需运行addslashes()
,然后将所有\\
替换为\
。
答案 1 :(得分:1)
如果你有这样的话:
<a href=\"test.html\">test</a>
使用addslashes(),输出将为:
<a href=\\\"test.html\\\">test</a>
因此,您可能需要更换多个\的每个匹配项以确保
答案 2 :(得分:0)
function addslashes($string) {
return preg_replace('/([^\\\\])\"/','$1\"',$string);
}
答案 3 :(得分:0)
Qaflanti的答案是正确的,但如果你想逃避单引号和双引号,我想让它更完整。
第一个选项:
function escape_quotes($string) {
return preg_replace("/(^|[^\\\\])(\"|')/","$1\\\\$2", $string);
}
输入
我喜欢“carots”,但“我”不喜欢“樱桃”
输出
我喜欢“carots”但是“我不喜欢樱桃”
说明:
\
在带引号的表达式中具有特殊含义,并且会转义字符串中的后续字符,因此您需要在正则表达式中编写\\
来搜索反斜杠字符, php你还需要逃避这两个反斜杠,总共加上4个反斜杠。因此,考虑到这一点,第一个捕获组然后搜索不是反斜杠的单个字符(而不是两个或四个反斜杠,因为它具有误导性)
第二个捕获组将搜索双引号或单引号 一次。
因此,这会找到未转义的引号(双引号和单引号)并在引号之前添加反斜杠,从而转义它。
第二个选项:
或者最好从一开始就将它们转换为html实体:
function htmlentities_quotes($string) {
return str_replace(array('"', "'"), array(""", "'"), $string);
}
然后你只需要使用php函数htmlspecialchars_decode($string);
将其恢复原状。
输入
我爱“carots”,但“我”不喜欢'樱桃'
输出
我喜欢
"
carots"
但"
我"
不要'
喜欢'
{樱桃{1}}