ff安全机制问题啊~~~55555555 2, JS的String类,支持replace方法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 发现一个怪问题为什么页面上的charset写=gb2312却可以显示gb2312里面没有的字呢?这是为什么? should be:var path1 = "c:\\dir1\\dir2"; var _s = document.getElementById(soundName); var url = document.URL url=url.replace(/(^.*?\/\/.*?\/.*?\/).*?$/,"$1")+"tam/abc/sound/"+soundName+".wav"alert(url) _s.src = url;tam/abc是应用程序里面放html的目录 回答第一个问题:在vista下,IE也不能显示本地的图片。因为,http://处于保护模式下,而file:///处于非保护模式下。 如果本地打开是可以用file:///C:/fruit.jpg这样的写法。不过我是在网上访问的。 比如打开c:\test.htm可以看到。 通过www.web.com/test.htm看就看不到了。我主要是想当一个文件选择框选择了一个图片后,在确定上传前,先生成一个预览图。在ie下可以,ff不支持么? 就是类似这个问题啊! 管你网页啥编码~~gbk和unicode字符转换成10进制或16进制写到gb2312编码的网页里照样能正常显示出来只要客户端OS的字体装的全就行下面测试的代码如果以gb2312编码保存成htm文件是不会成功的,将提示有不支持的字符,强行保存会丢失字符;如果以utf8编码保存,浏览器仍按照charset=gb2312解析脚本,一样会发生错误产生乱码;但如果以十进制来表示字符,不管脚本中meta如何定义,也不论文件存成哪种编码,都可以正常显示字符,点击文本框即可看到效果(测试环境:SUSE11 KDE;Opera9.52 Internal)<html><head><meta HTTP-EQUIV="Content-Type" content="text/html; charset=gb2312"></head><body>殺<br>殺<br><input type=text title="unicode字符" onclick="this.value='殺殺';" value="殺"></body></html> 上面错了,这样:<html><head><meta HTTP-EQUIV="Content-Type" content="text/html; charset=gb2312"></head><body>殺<br>殺<br><input type="text" value="殺" title="unicode字符" onclick="this.value='殺殺';"></body></html> <image src="file:///F:\FaceBook\facebook02\sendPresent\image\10.jpg" height="70px" width="70px"/> 就这个代码如果起个名字叫test.html本地可以打开!但是如果这个test.html放在服务器上就没办法打开了 晕!哪个是关键字所以不是用replace的方法能转换的 1.IE可以正常显示本地的图片,但是FF会出问题。写成下面的形式静态页面可以解决问题! <image src="file:///F:\FaceBook\facebook02\sendPresent\image\10.jpg" height="70px" width="70px"/> 但是如果这个html放在服务器上就不行了!察了资料说是安全机制问题!但是现在要做一个上传的东西啊! 需要支持ff不知道该怎么办了阿?不知道有没有什么办法啊 如果本地打开是可以用file:///C:/fruit.jpg这样的写法。不过我是在网上访问的。 比如打开c:\test.htm可以看到。 通过www.web.com/test.htm看就看不到了。我主要是想当一个文件选择框选择了一个图片后,在确定上传前,先生成一个预览图。在ie下可以,ff不支持么? 就是类似这个问题啊! 2.js如何把\换成/ 例如 var path1 = "c:\dir1\dir2"; 怎么能把上面字符串alert出 c:/dir1/dir2 这样的效果啊?3.发现一个怪问题为什么 页面上的charset写=gb2312 却可以显示gb2312里面没有的字呢? 这是为什么? 1<input type="file" onchange="SetViewPic(this.value)"/><br/><img id="imgView"/><script>function SetViewPic(v){//ie6和ff 2.0.0.12测试通过 document.getElementById("imgView").src="file:///"+v;}</script>2只能说你的字符转义没搞清楚var path1 = "c:\\dir1\\dir2"; alert(path1);alert(path1.replace(/\\/g,"/"));3你指的gb2312能显示的非gb2312字符集的字符是哪些??我怎么没碰到过 var url = document.URL url=url.replace(/(^.*?\/\/.*?\/.*?\/).*?$/,"$1")+"tam/abc/sound/"+soundName+".wav" 这种路径就是www.web.com/tam/abc/sound/"+soundName+".wav" 的形式呀,我这个是声音文件,你的图片也一样,放到你里html那个目录下,这个目录可以通过上面的形式访问 第一个问题是由于安全限制,在 FF 中的确显示不出来,IE7 中也是显示不出来,只不过 IE7 中有其它解决办法。FF 预览客户端的图片,感觉大家都在找解决办法,但都是水中捞月,目前能做的,只是放弃对 FF 在这点上的支持。如果大家有什么解决办法,一定要分享噢。 第二个问题是由于你的 path1 写法不对,应该连续写两个\,因为单独的\代表转义字符。 如果把这个代码放在一个test.html里面!然后用ff直接打开确实没问题啊!但是如果把这个test.html页面放到虚拟服务目录上就不行了啊!下面这样访问http://localhost/test.html就不行了啊!好象说ff的安全机制害怕打开一个网络上的页面,该页面如果直接调用一个本地的文件,怕有病毒什么的吧!但是我现在做这个功能需要预览本地图片啊!所以不知道能不能有什么办法饶过去啊!这个问题我发现是我自己搞乱了我先将原始字符串中的空格用replace(/ /g,'%20')替换成%20 然后在用replace(/\\/g,'/') 将第一步的\替换成/但是这样做的结果导致,空格又回来了!如果反过来做\又不能变成/了!所以一直出错!不知道怎么解决!错误操作如下c:\my pic\0.jpg然后先替换成了c:\my%20pic\0.jpg然后再替换成c:/my pic/0.jpg其实希望结果c:/my%20pic/0.jpg不知道该怎么做啊? 希望你再好好想一想我上面说的,如果不用特殊的技术(如ActiveX等),在vista下,IE也是不能显示本地的图片的。不必徒劳了。 1.不好意思,没打开iis调试,没想到ff通过服务器访问时不能使用file:///协议,^___^在ff和opera下只好通过服务器来处理了,服务器页面采用php写的,代码如下test.htm<html><head> <meta http-equiv=Content-Type content="text/html; charset=gb2312"/></head><body><form method="post" enctype="multipart/form-data" action="gotopage.php"><input type="file" name="userfile" onchange="SetViewPic(this)"/><br/></form>预览图片<br></body></html><script>var v="c:\\my pic\\0.jpg";v=v.replace(/ /g,"%20");alert(v);v=v.replace(/\\/g,"/");alert(v)//暂时测试ie6和safari【3.0.4】能使用img标签的file:///协议浏览图片//其他只能交由服务器处理了,并且容器为iframe标签var UseIMGTag=navigator.userAgent.toLowerCase().indexOf("applewebkit")!=-1;if(!UseIMGTag&&document.all){//不是safari,则判断下是否为ie7以下的浏览器 var m=/msie(.+?)(?=;)/i.exec(navigator.userAgent); if(m&&parseInt(m[1])<7)UseIMGTag=true;}var Reg=/\.(gif|jpg|bmp|png)$/iif(UseIMGTag)document.write("<img id='imgView'/>");else document.write('<iframe src="javascript:void(0)" frameborder="1" '+'style="width:100px;height:100px;" id="ifViewPic" name="ifViewPic"></iframe>');function $(id){return document.getElementById(id);}function SetViewPic(obj){ //先检查是否为图片 if(!Reg.test(obj.value)){ alert("不是图片文件!"); return; } if(UseIMGTag)$("imgView").src="file:///"+obj.value;//可以使用file:///协议的 else{//提交到viewpic.php,然后输出临时文件 var f=obj.form; var oldAC=f.action; var oldTag=f.target; f.target="ifViewPic"; f.action="viewpic.php"; f.submit(); //改回默认值 f.target=oldTag; f.action=oldAC; }}</script>viewpic.php<?php$type=$_FILES['userfile']['type'];if(!preg_match('/(jpeg|jpg|png|gif|bmp)$/',$type))die("{$type}为不可以浏览器的类型!");$tmpPath=$_FILES['userfile']['tmp_name'];if(is_uploaded_file($tmpPath)){ header("content-type:$type"); readfile($_FILES['userfile']['tmp_name']);}else die("上传失败无法预览!");?>2,没发现你的问题啊var v="c:\\my pic\\0.jpg";v=v.replace(/ /g,"%20");alert(v);v=v.replace(/\\/g,"/");alert(v) 1、服务器上是要有个专门的文件夹,然后都放在此文件下2、用replace()替换 1.就是说还是要上传到服务器了啊? 2.var v="c:\\my pic\\0.jpg"; v=v.replace(/ /g,"%20"); alert(v); v=v.replace(/\\/g,"/"); alert(v) 这个怎么能全部替换呢就是replaceall的意思啊? ie6和safari不需要,ff和opera需要,我给你的代码里面已经判断过了//添加原型函数String.prototype.replaceall=function(){ return this.replace(/( |\\)/g,function($1){if($1==" ")return "%20";else if($1=="\\")return "/";});}var v="c:\\my pic\\0.jpg"; alert(v);v=v.replaceall();//使用原型更改值alert(v); jquery 修改button的click函数 做一个可以索引到单元格的表格 按钮背景色无法改变 100分简单的长度截取 js控件的问题? 关于confirm的一个现象 超级简单:得到文本框的值并相加 孟子兄,能给详细讲讲iframe吗? 为什么src调用总是不成功?? 急!!急!!通过父窗口打开的子窗口怎么控制父窗口的属性!!---100大洋!---- 网页获取 在IE下 js关于字符串的比较 是不是有兼容性问题 求助~~~~~~~~~~~~~~~~~
却可以显示gb2312里面没有的字呢?
这是为什么?
var path1 = "c:\\dir1\\dir2";
var _s = document.getElementById(soundName);
var url = document.URL url=url.replace(/(^.*?\/\/.*?\/.*?\/).*?$/,"$1")+"tam/abc/sound/"+soundName+".wav"
alert(url)
_s.src = url;
tam/abc是应用程序里面放html的目录
如果本地打开是可以用file:///C:/fruit.jpg这样的写法。不过我是在网上访问的。
比如打开c:\test.htm可以看到。
通过www.web.com/test.htm看就看不到了。我主要是想当一个文件选择框选择了一个图片后,在确定上传前,先生成一个预览图。在ie下可以,ff不支持么?
就是类似这个问题啊!
下面测试的代码如果以gb2312编码保存成htm文件是不会成功的,将提示有不支持的字符,强行保存会丢失字符;
如果以utf8编码保存,浏览器仍按照charset=gb2312解析脚本,一样会发生错误产生乱码;
但如果以十进制来表示字符,不管脚本中meta如何定义,也不论文件存成哪种编码,都可以正常显示字符,点击文本框即可看到效果
(测试环境:SUSE11 KDE;Opera9.52 Internal)<html><head>
<meta HTTP-EQUIV="Content-Type" content="text/html; charset=gb2312">
</head>
<body>殺<br>殺<br>
<input type=text title="unicode字符" onclick="this.value='殺殺';" value="殺">
</body>
</html>
<meta HTTP-EQUIV="Content-Type" content="text/html; charset=gb2312">
</head>
<body>殺<br>殺<br>
<input type="text" value="殺" title="unicode字符" onclick="this.value='殺殺';">
</body>
</html>
本地可以打开!但是如果这个test.html放在服务器上就没办法打开了
晕!哪个是关键字所以不是用replace的方法能转换的
<image src="file:///F:\FaceBook\facebook02\sendPresent\image\10.jpg" height="70px" width="70px"/>
但是如果这个html放在服务器上就不行了!察了资料说是安全机制问题!但是现在要做一个上传的东西啊!
需要支持ff不知道该怎么办了阿?不知道有没有什么办法啊 如果本地打开是可以用file:///C:/fruit.jpg这样的写法。不过我是在网上访问的。
比如打开c:\test.htm可以看到。
通过www.web.com/test.htm看就看不到了。我主要是想当一个文件选择框选择了一个图片后,在确定上传前,先生成一个预览图。在ie下可以,ff不支持么?
就是类似这个问题啊! 2.js如何把\换成/
例如
var path1 = "c:\dir1\dir2";
怎么能把上面字符串alert出
c:/dir1/dir2 这样的效果啊?
3.发现一个怪问题为什么
页面上的charset写=gb2312
却可以显示gb2312里面没有的字呢?
这是为什么?
<input type="file" onchange="SetViewPic(this.value)"/><br/>
<img id="imgView"/>
<script>
function SetViewPic(v)
{//ie6和ff 2.0.0.12测试通过
document.getElementById("imgView").src="file:///"+v;
}
</script>2
只能说你的字符转义没搞清楚
var path1 = "c:\\dir1\\dir2";
alert(path1);
alert(path1.replace(/\\/g,"/"));
3
你指的gb2312能显示的非gb2312字符集的字符是哪些??我怎么没碰到过
www.web.com/tam/abc/sound/"+soundName+".wav" 的形式呀,我这个是声音文件,你的图片也一样
,放到你里html那个目录下,这个目录可以通过上面的形式访问
第二个问题是由于你的 path1 写法不对,应该连续写两个\,因为单独的\代表转义字符。
但是如果把这个test.html页面放到虚拟服务目录上就不行了啊!
下面这样访问http://localhost/test.html就不行了啊!好象说ff的安全机制害怕
打开一个网络上的页面,该页面如果直接调用一个本地的文件,怕有病毒什么的吧!但是我现在
做这个功能需要预览本地图片啊!所以不知道能不能有什么办法饶过去啊!
这个问题我发现是我自己搞乱了我先将原始字符串中的空格用replace(/ /g,'%20')替换成%20
然后在用replace(/\\/g,'/') 将第一步的\替换成/
但是这样做的结果导致,空格又回来了!如果反过来做\又不能变成/了!
所以一直出错!不知道怎么解决!错误操作如下
c:\my pic\0.jpg
然后先替换成了c:\my%20pic\0.jpg
然后再替换成c:/my pic/0.jpg其实希望结果
c:/my%20pic/0.jpg不知道该怎么做啊?
希望你再好好想一想我上面说的,如果不用特殊的技术(如ActiveX等),在vista下,IE也是不能显示本地的图片的。
不必徒劳了。
test.htm
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312"/>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="gotopage.php">
<input type="file" name="userfile" onchange="SetViewPic(this)"/><br/>
</form>
预览图片<br></body></html>
<script>
var v="c:\\my pic\\0.jpg";
v=v.replace(/ /g,"%20");
alert(v);
v=v.replace(/\\/g,"/");
alert(v)//暂时测试ie6和safari【3.0.4】能使用img标签的file:///协议浏览图片
//其他只能交由服务器处理了,并且容器为iframe标签
var UseIMGTag=navigator.userAgent.toLowerCase().indexOf("applewebkit")!=-1;
if(!UseIMGTag&&document.all){//不是safari,则判断下是否为ie7以下的浏览器
var m=/msie(.+?)(?=;)/i.exec(navigator.userAgent);
if(m&&parseInt(m[1])<7)UseIMGTag=true;
}
var Reg=/\.(gif|jpg|bmp|png)$/iif(UseIMGTag)document.write("<img id='imgView'/>");
else document.write('<iframe src="javascript:void(0)" frameborder="1" '
+'style="width:100px;height:100px;" id="ifViewPic" name="ifViewPic"></iframe>');
function $(id){return document.getElementById(id);}
function SetViewPic(obj)
{
//先检查是否为图片
if(!Reg.test(obj.value)){
alert("不是图片文件!");
return;
}
if(UseIMGTag)$("imgView").src="file:///"+obj.value;//可以使用file:///协议的
else{//提交到viewpic.php,然后输出临时文件
var f=obj.form;
var oldAC=f.action;
var oldTag=f.target;
f.target="ifViewPic";
f.action="viewpic.php";
f.submit();
//改回默认值
f.target=oldTag;
f.action=oldAC;
}
}
</script>viewpic.php
<?php
$type=$_FILES['userfile']['type'];
if(!preg_match('/(jpeg|jpg|png|gif|bmp)$/',$type))die("{$type}为不可以浏览器的类型!");$tmpPath=$_FILES['userfile']['tmp_name'];
if(is_uploaded_file($tmpPath)){
header("content-type:$type");
readfile($_FILES['userfile']['tmp_name']);
}
else die("上传失败无法预览!");
?>2,没发现你的问题啊var v="c:\\my pic\\0.jpg";
v=v.replace(/ /g,"%20");
alert(v);
v=v.replace(/\\/g,"/");
alert(v)
2、用replace()替换
1.就是说还是要上传到服务器了啊?
2.var v="c:\\my pic\\0.jpg";
v=v.replace(/ /g,"%20");
alert(v);
v=v.replace(/\\/g,"/");
alert(v)
这个怎么能全部替换呢就是replaceall的意思啊?
//添加原型函数
String.prototype.replaceall=function(){
return this.replace(/( |\\)/g,function($1){if($1==" ")return "%20";else if($1=="\\")return "/";});
}
var v="c:\\my pic\\0.jpg";
alert(v);
v=v.replaceall();//使用原型更改值
alert(v);