小编Ben*_*ley的帖子

如何在PHP中输出UTF-8 CSV,Excel将正确读取?

我有一个非常简单的事情,只输出一些CSV格式的东西,但它必须是UTF-8.我在TextEdit或TextMate或Dreamweaver中打开这个文件,它正确地显示了UTF-8字符,但是如果我在Excel中打开它,它就是这样做的傻事.这是我在文档的头部所得到的:

header("content-type:application/csv;charset=UTF-8");
header("Content-Disposition:attachment;filename=\"CHS.csv\"");
Run Code Online (Sandbox Code Playgroud)

除了Excel(Mac,2008)不想正确导入它之外,这一切似乎都具有预期的效果.Excel中没有选项可以"以UTF-8打开"或其他任何东西,所以......我有点恼火.

尽管有很多人遇到同样的问题,我似乎无法在任何地方找到任何明确的解决方案.我最看重的是包含BOM,但我无法弄清楚如何做到这一点.正如你在上面看到的那样,我只是提供echo这些数据,我不会写任何文件.如果我需要,我可以这样做,我不是因为此时似乎不需要它.有帮助吗?

更新:我尝试回显echo pack("CCC", 0xef, 0xbb, 0xbf);我刚刚从试图检测BOM的网站上提取的BOM.但Excel只会在导入时将这三个字符附加到第一个单元格,并且仍会混淆特殊字符.

php csv byte-order-mark utf-8

181
推荐指数
13
解决办法
31万
查看次数

简写条件是根据PHP中另一个变量的存在来定义变量

基本上,我希望能够将变量定义为一件事,除非该事物不存在.我发誓,在某个地方,我看到了一个看起来像这样的速记条件:

$var=$_GET["var"] || "default";
Run Code Online (Sandbox Code Playgroud)

但我找不到任何文件来做到这一点,老实说它可能是JS或ASP或我看到的东西.

我知道在上面的代码中应该发生的只是检查两个语句是否返回true.但我认为如果第一次失败,我看到有人做了一些基本上定义了默认值的东西.这是任何人都知道的事情,可以帮助我吗?我疯了吗?说起来似乎多余:

$var=($_GET["var"]) ? $_GET["var"] : "default";
Run Code Online (Sandbox Code Playgroud)

或特别多余的说:

if ($_GET["var"]) { $var=$_GET["var"]; } else { $var="default"; }
Run Code Online (Sandbox Code Playgroud)

思考?

php variables conditional shorthand

18
推荐指数
2
解决办法
2万
查看次数

如何在Webkit中控制Option元素的高度?

这似乎很简单,但我甚至无法找到的东西告诉我,这不是可能的,更不用说如何做到这一点.

我有一个使用扩展/多个selects 的页面,我似乎无法控制选项的高度.他们看起来很舒服.在Firefox中,optionin heightline-heightboth的CSS值似乎都有所需的效果padding,但在Chrome 8或Safari 5中却没有.我错过了什么?这是我的代码示例.如果有一些我不知道的重要价值,我会投入任何可能影响期权的东西.

body, input, select, checkbox { 
  font-family:'Avenir Lt Std',AppleGothic,'century gothic',Verdana,sans-serif; 
  font-size: 15px; 
  font-weight:200; 
  line-height: 18px; 
}

input, select { 
  color:#4c2a18; 
  border: 1px solid #cfc8b4; 
  background-color:#ffffff; 
  -moz-border-radius: 0; 
  -webkit-border-radius: 0; 
  border-radius: 0;
  margin:0; 
}

option { 
  height: 35px; 
  padding:5px; 
  line-height: 35px; 
}
Run Code Online (Sandbox Code Playgroud)
<select size="5">
  <option value="">This is option 1</option>
  <option value="">Option 2</option>
  <option value="">Just trying to show how the line height thing works.</option>
</select>
Run Code Online (Sandbox Code Playgroud)

你可以在 …

html css forms

12
推荐指数
1
解决办法
4万
查看次数

url_for 不使用default_url_options[:host] 值

我有一个 ActionMailer 的视图,其中包含一些不同的链接。我现在正在 localhost:3000 上运行它,因此我已在setup_mail.rbapp/initializers 中调用的文件中进行了设置(如此处所示

ActionMailer::Base.default_url_options[:host] = "localhost:3000"
Run Code Online (Sandbox Code Playgroud)

当我去url_for视图中使用时,它似乎没有拉出这个值。如果我然后添加:host => "localhost:3000"到每个url_for标签,它们就会正常工作。但如果不包含这些,它们就无法工作。

我有另一个标签 ,project_url正如它所显示的那样:指向指定项目的链接。该函数(包括主机值)只需project_url(@project). 为什么其中一个有效,而另一个却不起作用?

从我读到的所有内容来看,在初始化程序中设置default_url_options[:host]应该允许我省略标签:host中的值url_for。显然,仅仅添加该值并不是世界上最糟糕的事情,但这似乎没有必要,这意味着当我最终在某个地方托管该项目时,我将不得不仔细检查并更改整个地方的值。但更糟糕的是,这是我不明白的事情。当我来到这里时,我仍在学习,所以我想知道我做错了什么。

ruby-on-rails actionmailer

6
推荐指数
1
解决办法
5522
查看次数

cURL调用Twitter API会议"速率限制"而不超过5个请求

我刚刚开始乱用一个非常非常基本的Twitter API(http://api.twitter.com/1/statuses/user_timeline.json)来通过cURL将我的推文拉到我的网站.然而,使用一个没有人知道的页面(从而消除了无意中流量的可能性),在我有机会测试它之前,我得到了一个超出限速的东西.它表示它会在一小时后重置5次,所以我再次检查,并且有一分钟它可以工作但是它又回来告诉我我的速率限制被超过了.对于了解Twitter API和/或cURL的人来说,有几个问题:

首先,是应用于我的服务器(而不是用户)的速率限制?我会这么认为,但这当然会让它变得艰难.即使每个访问者有一个API调用,在具有边际流量的站点上,也可以在一小时内轻松超过速率限制.有没有办法将呼叫与访客关联,而不是服务器?似乎可能不是,但我不完全确定整个API是如何工作的,并且cURL似乎在许多地方都提倡.我知道如果我使用JSON和AJAX,我可以向用户发出请求,但仅仅是为了争论,cURL呢?

第二,任何想法如何在不刷新页面的情况下超越我的速率限制?我支付在另一个地方托管,所以我可能与另一个网站共享服务器空间,但我的网站肯定有一个独特的IP,所以应该...那应该没问题,对吧?那么即使运行代码(或运行一次代码?),我如何超过速率限制?

这是我的代码,如果它有帮助:

$ch=curl_init("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=screenname");
    curl_setopt_array($ch,array(
            CURLOPT_RETURNTRANSFER=>true,
            CURLOPT_TIMEOUT=>5,
        )
    );
$temp=curl_exec($ch);
curl_close($ch);
$results=json_decode($temp,true);
Run Code Online (Sandbox Code Playgroud)

此外,我现在已经得到它,以便如果Twitter返回速率限制错误,它会在文本文件中记录错误,以及限制将重置的时间.看看那个文件,它唯一一次更新(我没有重写,它只是添加)是我加载页面(可能一小时一两次),所以它不像其他东西正在使用此页面并调用此URL.

有帮助吗?

php twitter curl

5
推荐指数
1
解决办法
2780
查看次数

我可以在MySQL中为一个表的每一行加入两个只有一个匹配的表吗?

我有一个表,类和另一个我称之为"课程"的表 - 也就是说,某个特定人在特定地方教授的课程.我想拉一个表,基本上只是根据某些课程参数向我显示哪些类是活动的.例如:

CLASSES
class_id|class_name
--------|------------
       1|Class One
       2|Class Two
       3|Different Class
etc...

COURSES
course_id|class_id|room
---------|--------|--------
        1|       3|       1
        2|       3|       2
        3|       1|       1
        4|       3|       1
        5|       3|       2
        6|       2|       1
etc...

我想知道是否有一种方法可以让我只想SELECT classes.* FROM classes JOIN courses ON classes.class_id=courses.class_id WHERE courses.room=1返回每个类的一个实例.发生的事情是我只获得了在1号房间发生的课程,但我得到了每个课程的多个实例,因为在课堂1的课程表中有多个该课程的实例.

我已经尝试了各种不同的JOIN- 左,右,内等 - 而且因为我是根据另一张桌子的规格从一张桌子拉出来的,所以它们似乎都给了我相同的结果.

所以我得到了:

class_id|  class_name  |course_id|room
--------|--------------|---------|--------
       1|Class One     |        3|       1
       2|Class Two     |        6|       1
       3|Diferent Class|        1|       1
       3|Diferent Class|        4|       1
etc...

但我想得到:

class_id|  class_name …

php mysql

5
推荐指数
1
解决办法
9866
查看次数

"您的Ruby版本是1.9.3,但您的Gemfile指定为1.9.3-p194"

RVM不会让我跑,bundle因为它认为我的Ruby版本与我的Gemfile所说的不同,但它不是:

$ rvm list

rvm rubies

=> ruby-1.9.3-p194 [ x86_64 ]
   ruby-1.9.3-p429 [ x86_64 ]
 * ruby-2.0.0-p195 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin13.0.0]
Run Code Online (Sandbox Code Playgroud)

的Gemfile:

ruby '1.9.3-p194'
Run Code Online (Sandbox Code Playgroud)

但是之后:

$ bundle install
Your Ruby version is 1.9.3, but your Gemfile specified 1.9.3-p194
$ 
Run Code Online (Sandbox Code Playgroud)

这似乎是一件非常奇怪的事情.有任何想法吗?有很多人有这个问题,但他们的Gemfiles明显不同于正在运行的版本.我甚至完成了rvm use 1.9.3-p194,然后立即完成,bundle install但我得到了同样的错误.bundle update产生相同的错误.

如果我从Gemfile中删除ruby版本,它将默认为2.0.0,但切换rvm use到正确的版本(以符合远程服务器ruby版本)实际上是有效的.跑bundle install …

ruby ruby-on-rails rvm gemfile

3
推荐指数
2
解决办法
2946
查看次数

有没有办法让MySQL返回INSERT命令产生的行?

我已经做了一段时间的基本MySQL,但除此之外什么也没做.我想知道当我在表中插入一个新行时,是否有办法让行回显给我,或其他什么东西.基本上我有一个带有自动编号字段的表,我希望能够尽可能快速,轻松地获得该自动编号.如果我不能将行返回给我,还有什么我应该做的只是运行第二个查询以获得最高的autonum吗?这是不是允许某些其他进程或用户更新表的(轻微的,非常非常轻微的),这不再是正确的数字?目前我只是搜索一行,其中包含我刚刚输入的内容,甚至这似乎都会给我带来问题.

我正在使用PHP 5.1和MySQL 5.0.45.

谢谢你的帮助.

php mysql

2
推荐指数
1
解决办法
131
查看次数