我将首先向您提供我正在处理的代码,以便您可以按照我的意思(对不起法语,我意识到你们所有人都不会说法语但是我正在制作这个法语学校的网站)。我已经删除了我认为不属于问题的部分(实际文件长757行!)
photos.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Photos</title>
<script type="text/javascript">
function removeCriterion(criterionText)
{
var getData = new RegExp("&" + criterionText + "|\\?" + criterionText + "$|" + criterionText + "&", "gi");
window.location = window.location.toString().replace(getData,"");
}
</script>
</head>
<body>
<a class="retirerCritere" onclick="removeCriterion('Shawn+Freyssonnet-Inder');" title="Réessayer la recherche sans ce critère"><img src="img/deleteButton.png" alt="Retirer" /></a>
</body>
</html>
虽然所有额外内容都被删除后看起来并不多,但这是根据一组标准显示照片的页面的一部分。这些标准是通过php变量$ _GET获取的,所以如果我想显示属于我的所有照片(Shawn Freyssonnet-Inder)并且是在法国拍摄的,我使用以下链接:
<a href="photos.php?nom=Shawn+Freyssonnet-Inder&pays=France" ...>link</a>
然后,此页面会提取 nom = Shawn Freyssonnet-Inder 和支付 = 法国的所有照片一个mysql数据库。此外,它向用户显示用于过滤结果的标准列表,允许他(她)隔离标准,删除标准等。
注意:该空格将替换为带有php函数 urlencode 的加号(+)。在显示页面上的txt之前,我使用 urldecode 删除加号,确保用户具有适当的人性化版本的字符串。现在当我调用 removeCriterion 函数时,我使用相同的 urlencode d字符串作为参数,所以我相信javascript在查找网址中的文本时应该没有问题。 / p>
尝试删除条件时出现问题。如您所见,我使用 removeCriterion javascript函数删除条件,该函数只是在网址中找到条件定义并将其删除(查找和替换)。但出于某种原因,在某些标准下,它不起作用,例如“Shawn Freyssonnet-Inder”或其他带空格的字符串。
你们有没有人知道为什么javascript无法找到并替换url中包含空格的字符串?
答案 0 :(得分:6)
在正则表达式中,加号(+)具有特殊含义 - 它表示重复上一个项目一次或多次。
你需要转义加号才能表示字面加字符:
criterionText = criterionText.replace(/\+/g, '\\+');
答案 1 :(得分:2)
实际上你的脚本非常落后。您正在使用字段的值调用removeCriterion,但正则表达式正在寻找'?' + criterionText,仅匹配键/值对的键。
答案 2 :(得分:2)
添加正则表达式转义函数:
RegExp.escape = function ( s ) {
return s.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
};
从字符串构建正则表达式时,您应该像这样转义字符串:
function removeCriterion(criterionText) {
var getData = new RegExp("&" + RegExp.escape(criterionText) + "|\\?" +
RegExp.escape(criterionText) + "$|" +
RegExp.escape(criterionText) + "&", "gi");
window.location = window.location.toString().replace(getData,"");
}
正则表达式运算符(例如plus)现在应该停止引发麻烦。
答案 3 :(得分:1)
您可以在服务器端生成一个没有nom
参数的URL,而不是在客户端JavaScript中执行此操作。
例如,在服务器端,假设您收到了nom
&amp;的请求。 pays
参数;您可以从服务器端代码生成一个排除pays
参数的链接。
这不是那么简单吗?如果我误解了这个问题,请告诉我。
编辑:
<a href="photos.php?pays="<%=variableForCountry%>" ...>link</a>
这是如何在ASP中完成的。对不起,我还没有使用PHP。