Php addslashes()仅当未从之前添加斜杠时
我从数据库中得到了很多文本值,需要在需要引用的字符之前添加斜杠输出 问题是有些数据已经添加了斜杠,而有些数据没有 如何使用addslashes()添加斜杠,但同时确保在已添加斜杠的情况下不会添加额外的斜杠 例如:Php addslashes()仅当未从之前添加斜杠时,php,php-5.3,Php,Php 5.3,我从数据库中得到了很多文本值,需要在需要引用的字符之前添加斜杠输出 问题是有些数据已经添加了斜杠,而有些数据没有 如何使用addslashes()添加斜杠,但同时确保在已添加斜杠的情况下不会添加额外的斜杠 例如: Input: <a href="test.html">test</a> Output should be: <a href=\"test.html\">test</a> Input: <a href=\"test.html\"&g
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>
输入:
输出应为:
输入:
输出应为:
这是PHP5.3.10。如果您知道没有任何双斜杠,只需运行
addslashes()
,然后将所有\\
替换为\,如果您有类似的内容:
<a href=\"test.html\">test</a>
使用addslashes(),输出将为:
<a href=\\\"test.html\\\">test</a>
因此,您可能需要替换每次出现的多个\以确保Qaflanti的答案是正确的,但如果您希望同时转义单引号和双引号,我希望使其更完整
function addslashes($string) {
return preg_replace('/([^\\\\])\"/','$1\"',$string);
}
第一个选项:
function escape_quotes($string) {
return preg_replace("/(^|[^\\\\])(\"|')/","$1\\\\$2", $string);
}
输入
我喜欢“卡罗”,但“我”不喜欢“樱桃”
输出
我喜欢“卡诺”,但“我”不喜欢“樱桃”
说明:
function escape_quotes($string) {
return preg_replace("/(^|[^\\\\])(\"|')/","$1\\\\$2", $string);
}
\
在带引号的表达式中有一个特殊的含义,它将转义字符串中的以下字符,因此,虽然您需要在正则表达式中编写\
来搜索反斜杠字符,但在php中,您还需要转义这两个反斜杠,总计4个反斜杠
因此,考虑到这一点,第一个捕获组然后搜索一个不是反斜杠的字符(也不是两个或四个误导性的反斜杠)
第二个捕获组将搜索双引号或单引号
就一次
因此,这将查找未转义的引号(双引号和单引号),并在引号之前添加反斜杠,从而对其进行转义
第二选项:
function escape_quotes($string) {
return preg_replace("/(^|[^\\\\])(\"|')/","$1\\\\$2", $string);
}
或者,最好从一开始就将它们转换为html实体:
function htmlentities_quotes($string) {
return str_replace(array('"', "'"), array(""", "'"), $string);
}
然后你只需要使用php函数htmlspecialchars\u decode($string)
将其还原为原来的状态
输入
我喜欢“卡洛特”,但“我”不喜欢“樱桃”
输出
我爱《代码》”
carots“
但是”
I“
don&apos代码>我不喜欢
&apos代码>樱桃&apos代码>
如果有超过2个反斜杠的可能性,考虑使用递归函数和检查<代码>约束()/<代码>。我没有投票,但我认为至少第一个代码块需要解释(特别是使用的正则表达式)。